ZigZag Conversion
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”.
解题思路:找规律的题,不多说。但说实话题目并没有写清楚,如果是5行,排列顺序是这样的
0 8
1 7 9 15
2 6 10 14
3 5 11 13
4 12
用这样的小例来计算出规律。
代码如下:
class Solution {
public:
string convert(string s, int numRows) {
vector<char> ve;
int len=s.length();
if (numRows==1){ //别忘了numRows==1时的特殊情况
return s;
}
for (int i = 0; i < numRows; i++){
if(i==0){
for(int j=i;j<len;j+=2*numRows-2-i){
ve.push_back(s[j]);
}
}else if(i==numRows-1){
for(int j=i;j<len;j+=numRows-1+i){
ve.push_back(s[j]);
}
}else{
int k=1,j=i;
while(j<len){
ve.push_back(s[j]);
if(k%2==1){
j+=2*numRows-2*i-2;
}else{
j+=2*i;
}
k++;
}
}
}
string res = "";
for (int i = 0; i < ve.size(); i++){
res += ve[i];
}
return res;
}
};