【leetcode】6. Z 字形变换

51 阅读1分钟

leetcode-6.png

这一题如果按照题目意思来建立一个二维数组,一板一眼的放进去字符,就比较麻烦了,最后要返回的只是排列之后的从上到下的顺序。
所以在这里可以不必一板一眼的放在指定的位置rows[i][j],直接z形走位拼接,判断好方向以及行数即可。
9、11行代码的顺序千万不能调换,需要先判断是否在边界,然后再根据判断计算下一次的行数

var convert = function (s, numRows) {
    if (numRows === 0 || numRows === 1) return s
    let rows = new Array(numRows).fill('')
    let directionFlag = false
    let currentRow = 0
    for (let i = 0; i < s.length; ++i) {
        rows[currentRow] += s[i]
        // 到达边界之后换向
        if (currentRow === 0 || currentRow === numRows - 1) directionFlag = !directionFlag
        // 计算行数
        currentRow += directionFlag ? 1 : -1
    }
    return rows.join('')
};