题目:将字符串 “ACSDEGBSLSGJSLA” 以Z字形排列成给定的行数,如下变换成3行Z字形排列:
1 | A E L S |
之后,从左往右,从上往下逐行读取字符,得到:”AELSCDGSSJLSBG”。
示例1:
1 | 输入: s = "PAYPALISHIRING", numRows = 3 |
示例2:
1 | 输入: s = "PAYPALISHIRING", numRows = 4 |
解法:
按行排序:需要排成多少行即定义一个多少行的数组(3行为例:[[],[],[]]),通过从左向右依次迭代字符串,将每个字符依次放入(push)到指定的行中;另外,通过一个状态值控制方向;最终,得到的一个Z字形循环路径大致如下:
1 | 0 0 0 0 |
字符串从左到右循环过程中,根据行数定义的数组插入Z字形数据的路径如上,第一列从上到下,第二列从下到上,第三列从上到下……依次处理,最后得到代码:
CODE
1 | function convertStrHandler(strData, numRows) { |
总结:这里最终要的就是通过控制当前行和当前方向将对应的字符值插入到定义的二维数组对应的行中,最终将二维数组进行字符串连接处理。
时间复杂度: O(n),其 n === length(str)