6. Z字形变换(js)

发布时间:2024年01月20日

题目:

将一个给定字符串?s?根据给定的行数?numRows?,以从上往下、从左到右进行?Z 字形排列。

比如输入字符串为?"PAYPALISHIRING"?行数为?3?时,排列如下:

P   A   H   N
A P L S I I G
Y   I   R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"

思路:

根据Z字形把字符串中每个字符的坐标算出并存起来,遍历存储的坐标,把每一行的字母拼接起来。

代码:

/**
 * @param {string} s
 * @param {number} numRows
 * @return {string}
 */
var convert = function (s, numRows) {
    if (numRows === 1) return s
    let x = 0 // 列
    let y = 0 // 行
    let way = 1 // 1向下走,-1向上走
    let data = [] // 存numRows的每个元素Z字形对应的坐标
    for (let i = 0; i < s.length; i++) {
        data.push([y, x, s[i]])
        way === 1 ? y++ : y--
        if (way === -1) {
            // 斜着走时x才加
            x++
        }
        if (y === 0) {
            way = 1
        }
        if (y === numRows - 1) {
            way = -1
        }
    }
    let res = ''
    for (let i = 0; i < numRows; i++) { // 拼接每一行
        let row = data.filter(e => e[0] === i).map(e => e[2]).join('')
        res += row
    }
    return res
};

文章来源:https://blog.csdn.net/qq_43119912/article/details/135714400
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。