leetcode_p6_ZigZag_Conversion_c++

leetcode p6: ZigZag_Conversion

给定一个字符串s和行数numRows, 先将该字符串按z形排成numRows行,然后按行输出所有字符组成的新字符串。

举个栗子:
zigzag conversion

从中发现:

  1. 这些数字都与6有关,称为magicNum,该数与行数有关,举个不同行的例子,可以发现规律: magicNum = 2*(numRows - 1) ;
  2. 对于每行的第一个数字,是以2为步长依次递减的,当为0时,重新赋值为magicNum;
  3. 对同一行,已知一个步长,它的下一步步长为magicNum减去当前步长。

c++ 代码如下

class Solution {
public:
    string convert(string s, int numRows) {
        if (numRows == 1)
            return s;
        string res = "";
        int magicNum = 2*(numRows - 1);
        for (int row = 0; row < numRows; ++row) {
            int initRowStep = magicNum - row*2; // 每行的起始步长
            if (initRowStep == 0) {             // 步长为0,重置为magicNum
                initRowStep = magicNum;
            }
            int step = initRowStep;
            for (int idx = row; idx < s.size(); ) {
                res += s[idx];
                idx += step;
                step = magicNum - step;
                if (step == 0) {
                    step = magicNum;
                }
            }
        }
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/yingyujianmo/article/details/52910322