这是一道来自leetcode的题目,原题网址为https://leetcode.com/problems/zigzag-conversion/description/
一、题目
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"
.
二、我的解法
class Solution {
public:
string convert(string s, int numRows) {
if (numRows == 1) return s;
string strs[numRows];
for (int i = 0; i < numRows; i++) strs[i] = "";
int len = s.size();
for (int i = 0; i < len; i++) {
int row = i % (2 * numRows - 2);
if (row >= numRows) {
row = 2 * numRows - row - 2;
}
strs[row].append(1, s[i]);
}
string result = "";
for (int i = 0; i < numRows; i++) {
result += strs[i];
}
return result;
}
};
三、关键点
我认为这道题的关键在于发现其中的规律,仔细观察,可以发现,zigzag pattern的每一行的字母顺序和输入字符串的顺序一样,
这样我们只需确定输入字符串的字符在哪一行就可以了,通过构建一个string的数组,数组中的每个string对应zigzag中的一行,
最后按顺序把string连接起来就可以了