題目

?
題目決議
使用 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;
}
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/400548.html
標籤:java
上一篇:寫SQL的21個好習慣


