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"
.
第一次看到这个题目的人,可能不知道ZigZag是什么意思,简单解释一下,就是把字符串原顺序012345……按下图所示排列:
比较直观的解法是,用一个字符串数组 string[rows] 来存储每一行,最后一拼接就是最终结果。
自己的解法:
C++:
string Solution::convert(string s, int numRows) {
int length = s.length();
string temp[numRows],result;
int i = 0,row = 0;
while(i < length){
for(row = 0; row < numRows; row++){
if(i == length)
break;
temp[row] += s[i];
i++;
}
for(row = numRows - 2; row > 0; row--){
if(i == length)
break;
temp[row] += s[i];
i++;
}
}
if(length < numRows){
for (i = 0; i < length; i++) {
result.append(temp[i]);
}
} else{
for (i = 0; i < numRows; i++) {
result.append(temp[i]);
}
}
return result;
}