Skip to content

Latest commit

 

History

History
178 lines (140 loc) · 5.51 KB

2022.md

File metadata and controls

178 lines (140 loc) · 5.51 KB
title description keywords
2022. 将一维数组转变成二维数组
LeetCode 2022. 将一维数组转变成二维数组题解,Convert 1D Array Into 2D Array,包含解题思路、复杂度分析以及完整的 JavaScript 代码实现。
LeetCode
2022. 将一维数组转变成二维数组
将一维数组转变成二维数组
Convert 1D Array Into 2D Array
解题思路
数组
矩阵
模拟

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

🟢 Easy  🔖  数组 矩阵 模拟  🔗 力扣 LeetCode

题目

You are given a 0-indexed 1-dimensional (1D) integer array original, and two integers, m and n. You are tasked with creating a 2-dimensional (2D) array with m rows and n columns using all the elements from original.

The elements from indices 0 to n - 1 (inclusive) of original should form the first row of the constructed 2D array, the elements from indices n to 2 * n - 1 (inclusive) should form the second row of the constructed 2D array, and so on.

Return anm x n 2D array constructed according to the above procedure, or an empty 2D array if it is impossible.

Example 1:

Input: original = [1,2,3,4], m = 2, n = 2

Output: [[1,2],[3,4]]

Explanation: The constructed 2D array should contain 2 rows and 2 columns.

The first group of n=2 elements in original, [1,2], becomes the first row in the constructed 2D array.

The second group of n=2 elements in original, [3,4], becomes the second row in the constructed 2D array.

Example 2:

Input: original = [1,2,3], m = 1, n = 3

Output: [[1,2,3]]

Explanation: The constructed 2D array should contain 1 row and 3 columns.

Put all three elements in original into the first row of the constructed 2D array.

Example 3:

Input: original = [1,2], m = 1, n = 1

Output: []

Explanation: There are 2 elements in original.

It is impossible to fit 2 elements in a 1x1 2D array, so return an empty 2D array.

Constraints:

  • 1 <= original.length <= 5 * 10^4
  • 1 <= original[i] <= 10^5
  • 1 <= m, n <= 4 * 10^4

题目大意

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

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

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

示例 1:

输入: 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] ,构成二维数组的第二行。

示例 2:

输入: original = [1,2,3], m = 1, n = 3

输出:[[1,2,3]]

解释:

构造出的二维数组应该包含 1 行 3 列。

将 original 中所有三个元素放入第一行中,构成要求的二维数组。

示例 3:

输入: original = [1,2], m = 1, n = 1

输出:[]

解释: original 中有 2 个元素。

无法将 2 个元素放入到一个 1x1 的二维数组中,所以返回一个空的二维数组。

示例 4:

输入: original = [3], m = 1, n = 2

输出:[]

解释:

original 中只有 1 个元素。

无法将 1 个元素放满一个 1x2 的二维数组,所以返回一个空的二维数组。

提示:

  • 1 <= original.length <= 5 * 10^4
  • 1 <= original[i] <= 10^5
  • 1 <= m, n <= 4 * 10^4

解题思路

  1. 计算 original 的长度 len
  2. 如果 m * n ≠ len,返回 []
  3. 初始化二维数组 res,创建一个 m * n 的空数组。
  4. 遍历 original,根据索引公式r = floor(i / n)c = i % n,将元素放入 res[r][c] 中。
  5. 返回结果数组 res

复杂度分析

  • 时间复杂度O(m * n),遍历一维数组一次。
  • 空间复杂度O(m * n),构造一个二维数组。

代码

/**
 * @param {number[]} original
 * @param {number} m
 * @param {number} n
 * @return {number[][]}
 */
var construct2DArray = function (original, m, n) {
	const len = original.length;
	if (m * n !== len) return [];
	let res = new Array(m).fill().map((i) => new Array(n));
	for (let i = 0; i < len; i++) {
		const r = Math.floor(i / n); // 计算行索引
		const c = i % n; // 计算列索引
		res[r][c] = original[i];
	}
	return res;
};

相关题目

题号 标题 题解 标签 难度 力扣
566 重塑矩阵 [✓] 数组 矩阵 模拟 🟢 🀄️ 🔗