566. 重塑矩阵(模拟)

 

 

  最容易想到的就是创建一个新的一维数组,然后遍历一遍原数组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 }

猜你喜欢

转载自www.cnblogs.com/NiBosS/p/12003279.html