leetcode 6. Z 字形变换

题目传送门

链接:https://leetcode-cn.com/problems/zigzag-conversion/

题干

leetcode 6. Z 字形变换
leetcode 6. Z 字形变换

题解

自己的方法是先实现对应的Z字形数组,再对逐个字符进行连接。比较复杂,调了很长时间

看到了题解的方法,才知道可以简单很多,刷完题还是要及时看题解

其实不需要开一个char数组,可以开一个string数组,每次把当前字符加到当前的行即可

最后答案可以直接逐行相加

Code

自己的方法:

class Solution {
public:
    char arr[1005][1005];
    string str;
    string convert(string s, int numRows) {
        int x = 0, y = 0;
        int n = s.size(), idx = 0;
        if (numRows == 1)
            return s;
        while (idx < n) {
            while (x + 1 < numRows && idx < n) {
                arr[x++][y] = s[idx++]; 
            }
            while (x - 1 >= 0 && idx < n) {
                arr[x--][y++] = s[idx++];
            } 
        }
        for (int i = 0; i < numRows; i++) {
            // 因为第 y 列有可能已经有字符,所以需要访问
            for (int j = 0; j <= y; j++) { 
                if (arr[i][j] != 0) {
                    str += arr[i][j];
                }
            }
        }
        return str;
    }
};

题解的方法:

class Solution {
public:
    string str;
    string convert(string s, int numRows) {
        if (numRows == 1)
            return s;
        vector<string> rows(min(numRows, int(s.size())));
        bool goDown = false;
        int curRow = 0;

        for (char c : s) {
            rows[curRow] += c;
            if (curRow == 0 || curRow == numRows - 1) goDown = !goDown;
            curRow += goDown ? 1 : -1;
        }
        for (int i = 0; i < numRows; i++) {
            str += rows[i];
        }
        return str;
    }
};
上一篇:杨辉三角?这才是真正的杨辉三角(leetcode算法0基础 第四例组合数)


下一篇:C++解OJ题--杨辉三角(动态规划,第一次二维有点紧张)