LeetCode ZigZag Conversion
来源:互联网 发布:c 图片相似度算法 编辑:程序博客网 时间:2024/06/06 12:52
The string "PAYPALISHIRING"
is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H NA P L S I I GY I RAnd then read line by line:
"PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert("PAYPALISHIRING", 3)
should return "PAHNAPLSIIGYIR"
.
用简单的模拟来做,下面附上我的代码:
<pre name="code" class="cpp">class Solution {public: char **arr; string convert(string s, int numRows) { if (numRows==1||s.length()==0) { return s; } //计算行数列数 int Y; if ((numRows*2-2)!=0) { Y=(int)((numRows*s.length())/(numRows*2-2))+1; }else{ Y=1; } int X=numRows; arr= new char *[X]; for (int i=0; i<X; i++) { arr[i]=new char[Y]; } //初始化数组 for (int i=0; i<X; i++) { for (int j=0; j<Y; j++) { arr[i][j]=0; } } string ans; int vertical=1; int i=0; int j=0;//数组下标 for (int k =0; k<s.length(); k++) { arr[i][j]=s[k]; //逐个字符遍历 if (vertical&&i!=numRows-1) {//如果是竖直的并且还没到num个 i++;//下一次摆放的位置 continue; } if (vertical&&i==numRows-1) {//如果是竖着的已经num个了 vertical=0; i--; j++;//下一次摆放的位置 continue; } if (!vertical&&i!=0) {//如果是对角线,没到顶。 i--;j++;//下一次摆放的位置。 continue; } if (!vertical&&i==0) {//如果是对角线,到顶了。 i++;//下一次开始一个新的竖着的 vertical=1; } } ans=toString(s.length(),X, Y); return ans; } string toString(int size,int X,int Y){ char temparr[1000]; int count=0; memset(temparr, 0, sizeof(temparr)); for (int i=0; i<X; i++) { for (int j=0; j<Y; j++) { char c=arr[i][j]; if (c!=0) { temparr[count++]=c; size--; if (size==0) { break; } } } } return (string)temparr; }};
同学的代码:
其思路是每个循环赋值好一个竖排加上一个对角线:
string convert(string s, int numRows){ if(numRows == 1) return s; long len = s.size(); long n = (len/(2*numRows-2) +1)*numRows; char **array; array = new char*[numRows]; for(int i = 0; i < numRows; i++){ array[i] = new char[n]; } for(int i = 0; i < numRows; i++) for(int j = 0; j < n; j++) array[i][j] = ' '; int cur = 0, i = 0, j = 0; while(cur < s.size()){ for(; i < numRows && cur < s.size(); i++, cur++) array[i][j] = s[cur]; i -= 2; j++; for(; i >= 0 && cur < s.size(); i--, j++, cur++) array[i][j] = s[cur]; i += 2; } string s1; for(i = 0; i < numRows; i++) for(j = 0; j < n; j++) if(array[i][j] != ' ') s1 += array[i][j]; return s1;}
0 0
- LeetCode: ZigZag Conversion
- LeetCode : ZigZag Conversion
- leetcode 13:zigzag conversion
- [LeetCode] Zigzag Conversion
- LeetCode 6 - ZigZag Conversion
- Leetcode : ZigZag Conversion
- 【leetcode】Zigzag Conversion
- [LeetCode]ZigZag Conversion
- leetcode ZigZag Conversion
- LeetCode-ZigZag Conversion
- LeetCode ZigZag Conversion
- LeetCode 6: ZigZag Conversion
- leetcode-006:ZigZag Conversion
- Leetcode: ZigZag Conversion
- [LeetCode]ZigZag Conversion
- [LeetCode] ZigZag Conversion
- [LeetCode]ZigZag Conversion
- leetcode: ZigZag Conversion
- JasperReport:几个莫名其妙的问题的解决
- “无法解析的外部符号 _mysql_num_rows@4,该符号在函数”问题
- 多线程编程4 - GCD
- 关于华为信息机开发的一点感想
- 枚举
- LeetCode ZigZag Conversion
- mysql 索引 建立 查询 优化
- Objective-C语法
- Oracle 不同环境下导入解决方案
- 浙江大学PAT_甲级_1032. Sharing (25)
- Service服务
- 带你玩转Visual Studio——带你理解多字节编码与Unicode码
- 由AVPlayer引发出来KVC的坑(KVC使用一定得注意)
- Javascript模块化编程(二):AMD规范