最容易想到的就是创建一个新的一维数组,然后遍历一遍原数组nums,将其元素都按序填入新数组,最后在遍历一遍新创建的r*c的二维数组将一维数组的值按序填入.
1 class Solution { 2 public int[][] matrixReshape(int[][] nums, int r, int c) { 3 if(nums.length==0||nums[0].length==0) return null; 4 if(r*c!=nums.length*nums[0].length) return nums; 5 int k=0,x=0; 6 int[][] res=new int[r][c]; 7 int[] temp=new int[nums.length*nums[0].length]; 8 for(int i=0;i<nums.length;i++){ 9 for(int j=0;j<nums[0].length;j++){ 10 temp[x++]=nums[i][j]; 11 } 12 } 13 for(int i=0;i<r;i++){ 14 for(int j=0;j<c;j++){ 15 res[i][j]=temp[k++]; 16 } 17 } 18 return res; 19 } 20 }
稍微比前面那种暴力快一点的方法
1 class Solution { 2 public int[][] matrixReshape(int[][] nums, int r, int c) { 3 if(nums.length==0||nums[0].length==0) return null; 4 if(r*c!=nums.length*nums[0].length) return nums; 5 int k1=0,k2=0; 6 int[][] res=new int[r][c]; 7 for(int[] ref:nums){ 8 for(int val:ref){ 9 res[k1][k2++]=val; 10 if(k2==c){ //一行填满,转换到下一行 11 k1++; 12 k2=0; 13 } 14 } 15 } 16 return res; 17 } 18 }