leetcode_p6_ZigZag_Conversion_c++

来源:互联网 发布:女超人于莺离婚知乎 编辑:程序博客网 时间:2024/06/13 10:35

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;    }};
0 0
原创粉丝点击