leetcode_p6_ZigZag_Conversion_c++
来源:互联网 发布:女超人于莺离婚知乎 编辑:程序博客网 时间:2024/06/13 10:35
leetcode p6: ZigZag_Conversion
给定一个字符串s和行数numRows, 先将该字符串按z形排成numRows行,然后按行输出所有字符组成的新字符串。
举个栗子:
从中发现:
- 这些数字都与6有关,称为magicNum,该数与行数有关,举个不同行的例子,可以发现规律:
magicNum = 2*(numRows - 1)
; - 对于每行的第一个数字,是以2为步长依次递减的,当为0时,重新赋值为magicNum;
- 对同一行,已知一个步长,它的下一步步长为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