Skip to content

Files

2022.Convert 1D Array Into 2D Array

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Oct 3, 2021
Jan 1, 2022
Jan 1, 2022
Dec 7, 2021
Dec 7, 2021
Dec 7, 2021
Jan 1, 2022
Dec 7, 2021
Jan 1, 2022

English Version

题目描述

给你一个下标从 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

解法

在该题当中,想要成功转换为二维数组,元素不能少也不能多,所以需要先做一次长度判断,不对等的情况下直接退出。

在数量正确时,则按照给出的规格,将 original 分割成小数组,放入返回数组当中。

Python3

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)]

Java

class Solution {
    public int[][] construct2DArray(int[] original, int m, int n) {
        if (m * n != original.length) {
            return new int[0][0];
        }
        int[][] ans = new int[m][n];
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                ans[i][j] = original[i * n + j];
            }
        }
        return ans;
    }
}

C++

class Solution {
public:
    vector<vector<int>> construct2DArray(vector<int>& original, int m, int n) {
        if (m * n != original.size()) return {};
        vector<vector<int>> ans(m, vector<int>(n, 0));
        for (int i = 0; i < m; ++i)
        {
            for (int j = 0; j < n; ++j)
            {
                ans[i][j] = original[i * n + j];
            }
        }
        return ans;
    }
};

Go

func construct2DArray(original []int, m int, n int) [][]int {
	if m*n != len(original) {
		return [][]int{}
	}
	var ans [][]int
	for i := 0; i < m*n; i += n {
		ans = append(ans, original[i:i+n])
	}
	return ans
}

JavaScript

/**
 * @param {number[]} original
 * @param {number} m
 * @param {number} n
 * @return {number[][]}
 */
var construct2DArray = function(original, m, n) {
    const result = [];

    if (original.length != m * n) {
        return result;
    }
    
    for (let i = 0; i < m; i++) {
        result.push(original.slice(i * n, i * n + n));
    }
    
    return result;
};

TypeScript

function construct2DArray(original: number[], m: number, n: number): number[][] {
    const result = [];

    if (original.length != m * n) {
        return result;
    }
    
    for (let i = 0; i < m; i++) {
        result.push(original.slice(i * n, i * n + n));
    }
    
    return result;
};

...