ZigZag Conversion

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;
}
原文地址:https://www.cnblogs.com/agentgamer/p/6890659.html