題目:給一個二維數(shù)組和兩個數(shù)字,返回一個二維數(shù)組,第一個數(shù)字代表返回的數(shù)組的行,第二個數(shù)字代表列。
思路:剛開始想邏輯想不明白,可能是想循環(huán)一下搞定,但是不行,只能在循環(huán)外面創(chuàng)建兩個變量來控制要返回的數(shù)組的接收,思路很清晰就是說不上來,直接附代碼:
public int[][] matrixReshape(int[][] nums, int r, int c) {
if(nums==null)return null;
if(nums.length*nums[0].length!=r*c)return nums;
int[] tem=new int[nums.length*nums[0].length];
int carry=0;
int hang=0;
int[][] result=new int[r][c];
for(int i=0;i<nums.length;i++){
for(int j=0;j<nums[0].length;j++){
result[hang][carry]=nums[i][j];
if(carry==c-1){
carry=0;
hang++;
continue;
}
carry++;
}
}
return result;
}
看看高手的解題方法:
和我的差不多,就是用了一些取巧的辦法:
public int[][] matrixReshape(int[][] nums, int r, int c) {
int n = nums.length, m = nums[0].length;
if (r*c != n*m) return nums;
int[][] res = new int[r][c];
for (int i=0;i<r*c;i++)
res[i/c][i%c] = nums[i/m][i%m];
return res;
}