[路飞]_将一维数组转变成二维数组

259 阅读2分钟

2022. 将一维数组转变成二维数组

序言

2022元旦leetcode第一天每日一题,题号2022;leetcode有心了。

题目

给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和  n 。你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组。

original 中下标从 0 到 n - 1 (都 包含 )的元素构成二维数组的第一行,下标从 n 到 2 * n - 1 (都 包含 )的元素构成二维数组的第二行,依此类推。

请你根据上述过程返回一个 m x n 的二维数组。如果无法构成这样的二维数组,请你返回一个空的二维数组。

示例1

image.png

输入:original = [1,2,3,4], m = 2, n = 2
输出:[[1,2],[3,4]]
解释:
构造出的二维数组应该包含 2 行 2 列。
original 中第一个 n=2 的部分为 [1,2] ,构成二维数组的第一行。
original 中第二个 n=2 的部分为 [3,4] ,构成二维数组的第二行。

题解

  • 判断数组是否可以组成m*n的二维数组
  • 构建数组
  • 第1次截取[0,n-1]
  • 第2次截取[n,n+n-1]
  • 第3次截取[2n,2n+n-1]
  • ...
  • 第m次截取[(m-1)n,(m-1)n+n-1]

将这些数据放在二维数组中即可得到答案

代码

var construct2DArray = function(original, m, n) {
    const len = original.length;
    if(m * n !== len) return []
    let result = []
    for(let i=0; i<m; i++) {
        result.push(original.slice(i*n,(i+1)*n))
    }
    return result
};

结语

虽然本题是简单类型,似乎没必要为此写一篇文章。但是,我也非生而就会,简单的题型或许对初学者依旧需要指导。站在此刻,逐位算法前行者在他们眼中【简单】的题型,到我这里或许穷尽一生都无法自己解决出来。如果没有他们的文章传世,我又去哪学习算法呢?如果大家都因为简单而不写文章,那社区就不复存在了。所以在此写下本篇文章,希望能帮助哪怕一位读者。