【解析】
第一次看到這個題目的人,可能不知道ZigZag是什麼意思,簡單解釋一下,就是把字串原順序012345……按下圖所示排列:
發現所有行的重複週期都是 2 * nRows - 2
對於首行和末行之間的行,還會額外重複一次,重複的這一次距離本週期起始字元的距離是 2 * nRows - 2 - 2 * i
- class Solution {
- public:
- string convert(string s, int nRows) {
- // Start typing your C/C++ solution below
- // DO NOT write int main() function
- string result;
- if (nRows < 2) return s;
- for (int i = 0;i < nRows;++i) {
- for (int j = i;j < s.length();j += 2 * (nRows - 1)) {
- result.push_back(s[j]);
- if (i > 0 && i < nRows - 1) {
- if (j + 2 * (nRows - i - 1) < s.length())
- result.push_back(s[j + 2 * (nRows - i - 1)]);
- }
- }
- }
- return result;
- }
- };