LeetCode 题解工作台

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

给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和 n 。你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组。 original 中下标从 0 到 n - 1 (都 包含 )的元素构成二维数组的第一行,下标从 n 到 2 * n - 1 (都 包…

category

3

题型

code_blocks

6

代码语言

hub

3

相关题

当前训练重点

简单 · 数组·matrix

bolt

答案摘要

根据题目描述,我们知道,要想构造出一个 行 列的二维数组,需要满足 $m \times n$ 等于原数组的长度。如果不满足,直接返回空数组即可。 如果满足,我们可以按照题目描述的过程,将原数组中的元素依次放入二维数组中即可。

Interview AiBox logo

Interview AiBox 实时 AI 助手,陪你讲清 数组·matrix 题型思路

试试 AiBox 面试助手arrow_forward
description

题目描述

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

original 中下标从 0 到 n - 1 (都 包含 )的元素构成二维数组的第一行,下标从 n 到 2 * 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 * 104
  • 1 <= original[i] <= 105
  • 1 <= m, n <= 4 * 104
lightbulb

解题思路

方法一:模拟

根据题目描述,我们知道,要想构造出一个 mmnn 列的二维数组,需要满足 m×nm \times n 等于原数组的长度。如果不满足,直接返回空数组即可。

如果满足,我们可以按照题目描述的过程,将原数组中的元素依次放入二维数组中即可。

时间复杂度 O(m×n)O(m \times n),其中 mmnn 分别为二维数组的行数和列数。忽略答案的空间消耗,空间复杂度 O(1)O(1)

1
2
3
4
5
6
class Solution:
    def construct2DArray(self, original: List[int], m: int, n: int) -> List[List[int]]:
        if m * n != len(original):
            return []
        return [original[i : i + n] for i in range(0, m * n, n)]
speed

复杂度分析

指标
时间complexity is O(m \times n) because each element is accessed once. Space complexity is O(1) additional space aside from the output since slices reference elements directly.
空间O(1)
psychology

面试官常问的追问

外企场景
  • question_mark

    Are you checking whether the total elements match m times n?

  • question_mark

    Can you fill rows sequentially while maintaining the order from the original array?

  • question_mark

    What will you return if conversion is impossible due to element count mismatch?

warning

常见陷阱

外企场景
  • error

    Not verifying that original.length equals m times n, leading to incorrect output or runtime errors.

  • error

    Incorrectly slicing elements, which can shift positions and break row formation.

  • error

    Assuming extra elements can be truncated instead of returning an empty array when exact fit is impossible.

swap_horiz

进阶变体

外企场景
  • arrow_right_alt

    Convert 1D array into jagged 2D array where row lengths can vary, requiring dynamic slicing.

  • arrow_right_alt

    Fill the 2D array column-major instead of row-major, changing the iteration pattern.

  • arrow_right_alt

    Handle negative or zero elements in original and adjust the feasibility check accordingly.

help

常见问题

外企场景

将一维数组转变成二维数组题解:数组·matrix | LeetCode #2022 简单