跳至主要內容

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


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

🟢   🔖  数组 矩阵 模拟  🔗 力扣open in new window LeetCodeopen in new window

题目

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重塑矩阵[✓]数组 矩阵 模拟🟢🀄️open in new window 🔗open in new window