6. ZigZag Conversion
字符串“PAYPALISHIRING”,给定一个行数,使用zigzag模式,可以表示为:
文章图片
image.png 然后,按照正常行的顺序读取,字符串为:"PAHNAPLSIIGYIR",任务就是,写代码来完成这个转换
string convert(string s, int numRows)
- Example 1
输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"
- Example 2
输入:s = "PAYPALISHIRING", numRows = 4思路 【LeetCode|LeetCode 6】这个问题我们只要统计每一行的字符就可以了。规律就是,从第0个字符开始,每下一个字符在下一行,一直到第n行,也就是n-1个字符,之后每个字符在之前字符的上一行,再回到第0行,这样一直重复,一直到结束。
输出:"PINALSIGYAHRPI"
#include
#include
#include
#include using namespace std;
class Solution {
public:
string convert(string s, int numRows) {
if (numRows == 1) return s;
vector v(numRows, "");
int step = 1;
int row = 0;
for (auto c : s) {
v[row].push_back(c);
row += step;
if (row == numRows - 1) step = -1;
if (row == 0) step = 1;
}
string res;
for (auto x : v) res.append(x);
return res;
}
};
int main() {
Solution solver;
cout << solver.convert("PAYPALISHIRING", 3).c_str() << endl;
cout << solver.convert("PAYPALISHIRING", 4).c_str() << endl;
getchar();
}
文章图片
image.png