Leetcode 6. ZigZag Conversion 题解

Last Updated At: 2016-03-31

题目链接

我的解

找规律,注意一些扰动情况即可。

16ms

class Solution {
    public:
        std::string convert(std::string s, int numRows) {
            if(numRows == 1)
                return s;
            std::string res;
            size_t margin = (numRows & 0x1) ? 4 * (numRows / 2):2 * numRows - 2;
            for (size_t i = 0; i < numRows; ++i)
            {
                size_t j = i;
                size_t step2 = 2 * j;
                size_t step1 = margin - step2;
                if (j < s.size())
                    res += s[j];
                while (true)
                {
                    if(!step1&&!step2)
                        break;
                    if(step1)
                    {
                        j += step1;
                        if (j >= s.size())
                            break;
                        res += s[j];
                    }
                    if(step2)
                    {
                        j += step2;
                        if (j >= s.size())
                            break;
                        res += s[j];
                    }
                }
            }
            return res;
        }
};

启发

此类题一是注意定义,比如这个 ZigZag 到底是怎么回事;二是小心扰动情况。