LeetCode 6

2018-10-10  本文已影响0人  Junr_0926

6. ZigZag Conversion

字符串“PAYPALISHIRING”,给定一个行数,使用zigzag模式,可以表示为:


image.png

然后,按照正常行的顺序读取,字符串为:"PAHNAPLSIIGYIR",任务就是,写代码来完成这个转换
string convert(string s, int numRows)

输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"

输入: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
上一篇下一篇

猜你喜欢

热点阅读