[Leetcode] 6 - ZigZag Conversion

题目链接:https://oj.leetcode.com/problems/zigzag-conversion/


找规律的一道题,row往前进2步的话,如果投影在zigzag的路径上,则是走了一个V字形,也就是说每一行的相邻2步,都是走了同样的投影距离。然后主要抓到步数计算的规律即可。

*注意step为0的情况,这时候要pick up最大的步长继续走。

*注意row为1行的情况,最早判断,避免死循环,因为步长是0。

*一直尝试po讲解照片,但是无论如何都显示不出来。有空搞定了传张照片帮大家理解,现在就借助code理解吧。

class Solution {
public:
    string convert(string s, int nRows) {
        if (nRows <= 0) return "";
        if (nRows == 1 || nRows > s.size()) return s;
        
        int zigCount = 2 * nRows - 2;
        
        string res = "";
        int idx = 0;
        while (idx < nRows) {
            int curIdx = idx;

            int step;
            bool flag = true;
            while (curIdx < s.size()) {
                step = (flag ? zigCount - idx * 2 : idx * 2);
                if (step == 0) step = max(zigCount - idx * 2, idx * 2);
                
                flag = !flag;
                res += s[curIdx];
                curIdx += step;
            } 
            ++idx;
        }
        
        return res;
    }
};


你可能感兴趣的:([Leetcode] 6 - ZigZag Conversion)