LeetCode - 2022 - 将一维数组变成二维数组 - Java

这篇博客讨论了如何使用Java中的System.arraycopy()方法从一维数组构建一个m*n的二维数组。当原始数组长度不等于m*n时,返回空二维数组。博客详细解释了System.arraycopy()的工作原理,并提供了两种实现方式:一种是直接使用System.arraycopy()进行数组拷贝,另一种是通过双重循环逐个元素拷贝。代码示例展示了这两种方法的应用。
摘要由CSDN通过智能技术生成

题目

在这里插入图片描述


题目解析

使用 original 数组中的所有元素,去组成一个 m * n 的二维数组。如果组成不了【 m * n != original】,则返回一个 空的二维数组。
难点: 如果将一维数组 original 中的元素,每次复制 n 个元素,到 二维的数组一行里。(m 行 == 复制 m 次)

这里就需要借助数组的拷贝方式。一共有4 种方式,可参考数组的定义与使用文章,你们可以在目标中找: 数组拷贝【位置偏下】
在这里插入图片描述


下面我们就是用数组四种拷贝方式 中 System.arraycopy( ) 来实现代码的

在这里插入图片描述
src == source - 源头;dest == destination - 目标;
srcPos == source position - 源头中某个位置;
destPos == destination positon - 目标中某个位置;
length - 长度/元素个数;
System.arraycopy 的功能就是: 把 源头的数组,从 源头中某个位置开始 拷贝,拷贝到 destination 中的 某个位置。拷贝元素个数为 length / 拷贝长度为 length。


代码如下:

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

在这里插入图片描述


代码细节

在这里插入图片描述


还有一种方法,就是双重循环拷贝。

一个元素一个元素的拷贝

代码如下

class Solution {
    public int[][] construct2DArray(int[] original, int m, int n) {
        if(original.length != m * n){
            return new int[0][];
        }
        int[][] array = new int[m][n];
        // for(int i = 0;i < original.length;i+=n){
        //     System.arraycopy(original,i,array[i/n],0,n);
        // }
        int o = 0;// 用来记录 拷贝到 original数组中第几个元素的下标
        for(int i = 0;i < m; i++){
            for(int j = 0; j < n; j++){
                array[i][j] = original[o];
                o++;
            }
        }
        return array;
    }
}

在这里插入图片描述

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dark And Grey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值