https://leetcode.com/problems/zigzag-conversion/#/description
我把这题分成了两个问题。基本思路是:有多少rows要zigzag 就弄多少个数组,所以zigzag 不过就是在这些数组间往返添加元素而已。
所以第一个问题是,如何找出一个数组的往返index;第二个问题就简单了,用往返index 拿到特定的数组,然后往里面添加字符。
求往返index
这个试了几个方案都失败了最后是列了几个表,把n=1, n=2, n=3, n=4 的表都列出来
找到规律是每2*n - 2 个元素后开始有规律的重复,这样找到规律就简单了。
function zigzagIndex(i, n) { if (n == 1) return 0; var loop = 2*n - 2; var i_p = i % loop; var residual = i_p - (n - 1); if (residual > 0) { return (n - 1 - residual); } return i_p; } var convert = function(s, numRows) { var rows = []; for (var i = 0; i < numRows; i++) { rows.push([]); } for (var i = 0; i < s.length; i++) { var row = rows[zigzagIndex(i, numRows)]; row.push(s[i]); } var ret = ''; for (var i = 0; i < numRows; i++) { ret += rows[i].join(''); } return ret; }