码迷,mamicode.com
首页 > 其他好文 > 详细

[Leetcode] 6 - ZigZag Conversion

时间:2015-01-07 18:55:23      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

题目链接: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

标签:

原文地址:http://blog.csdn.net/algorithmengine/article/details/42495753

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!