原题如下:
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 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"
.
如果理解了题意,这道题感觉还是比较简单的,只需申请一个nRows大小的字符串向量,然后依次向每个字符串添加字符,最后再将字符串进行串联即可。在添加时注意超过边界时需要回到边界里第二个,所以是加减2,另外就是向前向后添加用flag标记,分别用来加减1操作。
class Solution {
public:
string convert(string s, int nRows) {
if(nRows == 1)
return s;
vector<string>v(nRows);
int count = 0;
int flag = 1;//flag为1是向前走,为-1是向后走
for(int i = 0; i < s.size(); i++){
if(count < 0){
count = count + 2;
flag = 1;
}
else if(count >= nRows){
count = count - 2;
flag = -1;
}
v[count].append(1,s[i]);
count = count + flag;
}
for(int i = 1; i < nRows; i++){
v[0].append(v[i]);
}
return v[0];
}
};