返回

将一维数组转变成二维数组,so easy!

前端

力扣题解 第13期:2022. 将一维数组转变成二维数组

今日题目难度简单,通过率67.2%,主要考察数组相关操作。

题目

给你一个下标从 0 开始的整数数组 original 和两个整数 m 和 n 。你需要将 original 重新排列成一个 m x n 的矩阵,使得:

  • 原数组 original 中的所有元素都被に使用
  • 矩阵每一行都包含 n 个元素
  • 矩阵每一列都包含 m 个元素

如果可以将 original 重新排列成 m x n 矩阵,请你返回 true ;否则,返回 false 。

示例 1:

输入:original = [1,2,3,4], m = 2, n = 2
输出:true
解释:original 可以重新排列成下述矩阵:
[[1,2],
 [3,4]]

示例 2:

输入:original = [1,2,3], m = 1, n = 3
输出:false
解释:original 无法重新排列成 1 x 3 矩阵。

示例 3:

输入:original = [1,2], m = 1, n = 1
输出:true
解释:original 可以重新排列成下述矩阵:
[[1]]

示例 4:

输入:original = [1,2,3,4,5,6], m = 2, n = 3
输出:true
解释:original 可以重新排列成下述矩阵:
[[1,2,3],
 [4,5,6]]

提示:

  • 1 <= original.length <= 5000
  • 1 <= original[i] <= 5000
  • 1 <= m, n <= 5000

解题思路

这道题考察的是数组相关操作,主要思想是将一维数组中的元素按照一定规律排列成二维数组。我们可以使用双重循环来实现这个过程,外层循环控制行,内层循环控制列。在排列元素时,我们需要考虑以下几点:

  • 首先,我们需要判断一维数组的长度是否能够被二维数组的行数和列数整除,如果不能整除,则无法将一维数组排列成二维数组。
  • 其次,我们需要确定二维数组每一行和每一列的元素个数。
  • 最后,我们需要将一维数组中的元素按照一定的规律排列到二维数组中。

代码实现

def can_be_transformed(original, m, n):
    """
    判断一维数组能否被排列成m x n的二维数组
    """
    # 判断一维数组的长度是否能够被二维数组的行数和列数整除
    if len(original) != m * n:
        return False

    # 确定二维数组每一行和每一列的元素个数
    row_size = m
    col_size = n

    # 将一维数组中的元素按照一定的规律排列到二维数组中
    result = [[0 for _ in range(col_size)] for _ in range(row_size)]
    index = 0
    for i in range(row_size):
        for j in range(col_size):
            result[i][j] = original[index]
            index += 1

    # 返回结果
    return result


# 测试代码
original = [1, 2, 3, 4, 5, 6]
m = 2
n = 3
print(can_be_transformed(original, m, n))

输出:

[[1, 2, 3], [4, 5, 6]]

总结

这道题考察的是数组相关操作,主要思想是将一维数组中的元素按照一定规律排列成二维数组。我们可以使用双重循环来实现这个过程,外层循环控制行,内层循环控制列。在排列元素时,我们需要考虑以下几点:

  • 首先,我们需要判断一维数组的长度是否能够被二维数组的行数和列数整除,如果不能整除,则无法将一维数组排列成二维数组。
  • 其次,我们需要确定二维数组每一行和每一列的元素个数。
  • 最后,我们需要将一维数组中的元素按照一定的规律排列到二维数组中。