题目
-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”.
解题思路
本题的关键是找到规律通过举例子可以知道周期为2*nRows-2;先得出首行和尾行的字符,然后再加上中间的字符。
class Solution {
public:
string convert(
string s,
int nRows) {
int len = s.length();
if (len ==
0 || nRows <
2)
return s;
string ret =
"";
int lag =
2*nRows -
2;
for (
int i =
0; i < nRows; i++) {
for (
int j = i; j < len; j += lag) {
char c = s[j];
ret += c;
if (i >
0 && i < nRows-
1) {
int t = j + lag -
2*i;
if (t < len) {
char d = s[t];
ret += d;
}
}
}
}
return ret;
}
};
转载请注明原文地址: https://ju.6miu.com/read-2426.html