美文网首页
LeetCode 6

LeetCode 6

作者: Junr_0926 | 来源:发表于2018-10-10 21:49 被阅读0次

    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

    相关文章

      网友评论

          本文标题:LeetCode 6

          本文链接:https://www.haomeiwen.com/subject/cnimaftx.html