LeetCode-Z字形变换(待优化)

LeetCode刷题笔记

LeetCode题库:https://leetcode-cn.com/problemset/all/

Z字形变换(待优化)

给定字符串s,对其进行Z字形排列,然后横向输出一个新的字符串

思路

创建特定大小的矩阵,将字符串s按照Z字形排列规则依次放入矩阵,最后输出矩阵内容

代码实现

var convert = function(s, numRows) {
    if (numRows === 1) return s;	// 行数等于1时,返回原字符串
    const col = Math.ceil(Math.ceil(s.length / 4) * 2);	// 获取矩阵列数
    const result = [];
    for (let i = 0; i < numRows; i++) {
        result[i] = [];
        for (let j = 0; j < col; j++) {
            result[i][j] = '';
        }
    }

    var i = 0,
        j = 0,
        k = 0,
        add;

    while (k < s.length) {
        result[i][j] = s[k];

        if (parseInt(j % (numRows - 1)) !== 0 || i === numRows - 1) {
            j++;
        }
        if (i === numRows - 1) {
            add = false;	// 当遍历到最后一行,开始向上遍历
        }
        if (i === 0) {
            add = true;
        }
        if (add) {
            i++;
        } else {
            i--;
        }

        k++;
    }

    // 获取矩阵内容
    var str = '';
    for (let i = 0; i < numRows; i++) {
        for (let j = 0; j < col; j++) {
            if (result[i][j] !== '') str += result[i][j];
        }
    }

    return str;
};

运行结果

执行用时 内存消耗
272 ms 57.5 MB
posted @ 2021-06-01 21:04  陈嘉懿  阅读(38)  评论(0编辑  收藏  举报