题目描述:https://leetcode.com/problems/zigzag-conversion/
Total Accepted: 58220 Total Submissions: 269341 Difficulty: Easy
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 N
A P L S I I G
Y I R
And 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"
.
题目还是比较简单的,只要考察“之”字形的模拟打印程序,由于样例给出的是
nrows = 3 ,容易搞混掉这个字形的顺序,如下所示:
0 8 16 (8)
1 7 9 15 17 (6,2)
2 6 10 14 18 (4,4)
3 5 11 13 19 (2,6)
4 12 20.。。。 (8)
即可以找到规律
代码如下:
class Solution {
public:
string convert(string s, int numRows) {
if(numRows == 1) return s;
int total = numRows * 2 - 2; //间隔总数
int gap = total;
string str = "";
int len = s.size();
bool flag = true;
for(int i = 0; i < numRows; i ++){
flag = true;
for(int j = i ; j < len;){
str += s[j];
if(gap == total || gap == 0){ //处理首行和最后一行
j += total;
}
else{ //中间的情况
if(flag){
j += gap;
flag = false;
}
else{
j += total - gap;
flag = true;
}
}
}
gap = gap -2;
}
return str;
}
};