美文网首页
LeetCode6-ZigZag Conversion(C++)

LeetCode6-ZigZag Conversion(C++)

作者: PengQ1 | 来源:发表于2020-04-04 09:12 被阅读0次

    Description

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

    P   A   H   N
    A P L S I I G
    Y   I   R
    

    And then read line by line: "PAHNAPLSIIGYIR"

    Write the code that will take a string and make this conversion given a number of rows:

    string convert(string s, int numRows);
    Example 1:

    Input: s = "PAYPALISHIRING", numRows = 3
    Output: "PAHNAPLSIIGYIR"
    Example 2:

    Input: s = "PAYPALISHIRING", numRows = 4
    Output: "PINALSIGYAHRPI"
    Explanation:

    P     I    N
    A   L S  I G
    Y A   H R
    P     I
    

    AC代码

    class Solution {
    public:
        string convert(string s, int numRows) {
            if(numRows <= 1) {
                return s;
            }
    
            vector<string> pattern(numRows, "");
            string res = "";
            // down is a flag which determine the direction
            int down = 0;
            // row stands for which row it is now
            int row = 0;
            for(int i=0; i<s.size(); i++) {
                pattern[row].push_back(s[i]);
                if(row == 0) {
                    down = 1;  // Move downside
                } else if(row == numRows - 1) {
                    down = -1;  // Move upside
                }
                row += down;
            }
    
            for(int i=0; i<numRows; i++) {
                res += pattern[i];
            }
    
            return res;
        }
    };
    

    测试代码

    int main() {
        Solution s;
    
        string s1 = "PAYPALISHIRING";
        string res_s1 = s.convert(s1, 3);
        cout << res_s1 << endl;
    
        string s2 = "PAYPALISHIRING";
        string res_s2 = s.convert(s2, 4);
        cout << res_s2 << endl;
    }
    

    总结

    使用牺牲空间复杂度的方式换取时间复杂度,创建一个vector,来存储每一行的字符串。设置一个flag,决定index移动的方向。

    相关文章

      网友评论

          本文标题:LeetCode6-ZigZag Conversion(C++)

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