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)
PAHN A P L S I I G YIR
And then read line by line:
"PAHNAPLSIIGYIR"
【LeetCode ZigZag Conversion】 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"
.
题意:给你个按N型排列的字符串,并告诉你几行,让你输出每一行连起来的字符串
思路:首先画出N行,借用一张图
文章图片
通过这张图得出每相邻偶数行的坐标差,和相邻的坐标差,计算就行了
class Solution {
public:
string convert(string s, int nRows) {
if (nRows <= 1)
return s;
string ans = "";
int len = s.length();
for (int i = 0;
i < nRows;
i++) {
int cur = i;
while (cur < len) {
ans += s[cur];
if (i != 0 && i != nRows-1 && (cur + 2 * (nRows - 1 - i)) < len)
ans += s[cur + 2 * (nRows- 1 - i)];
cur += 2 * (nRows - 1);
}
}return ans;
}
};