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
输出:"PINALSIGYAHRPI"
思路
这个问题我们只要统计每一行的字符就可以了。规律就是,从第0个字符开始,每下一个字符在下一行,一直到第n行,也就是n-1个字符,之后每个字符在之前字符的上一行,再回到第0行,这样一直重复,一直到结束。
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <algorithm>
using namespace std;
class Solution {
public:
string convert(string s, int numRows) {
if (numRows == 1) return s;
vector<string> 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
网友评论