Skip to content

Latest commit

 

History

History
53 lines (52 loc) · 1.4 KB

006.Z字形变换.md

File metadata and controls

53 lines (52 loc) · 1.4 KB

题目描述

将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:

L   C   I   R
E T O E S I I G
E   D   H   N

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

示例

输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:

L     D     R
E   O E   I I
E C   I H   N
T     S     G

思路

根据行数构建多个字符串,遍历目标字符串控制上行和下降的行索引,将字符加入相应的字符串中。遇到0则向下行,遇到numRows - 1则向上行。

解题代码

/**
 * @param {string} s
 * @param {number} numRows
 * @return {string}
 */
let convert = function(s, numRows) {
    if (numRows === 1) {
        return s;
    }
    let result = [];
    for (let i = 0; i < numRows; i++) {
        result[i] = '';
    }
    let goingDown = false;
    let rowIndex = 0
    for (let i = 0, l = s.length; i < l; i++) {
        result[rowIndex] += s[i];
        if (rowIndex === 0 || rowIndex === numRows - 1) {
            goingDown = !goingDown;
        }
        goingDown ? rowIndex ++ : rowIndex --;
    }
    let resultStr = result[0];
    for (let i = 1; i < numRows; i++) {
        resultStr += result[i];
    }
    return resultStr;
 };