链接
题意
给定一个矩阵和新的行数和列数。输出变形后的矩阵。
思路
利用给定的行数和列数构造一个二维数组,再将原矩阵中的数一个一个进行填充。
代码
Java 1:
public class Solution {
public int[][] matrixReshape(int[][] nums, int r, int c) {
if (r * c != nums.length * nums[0].length) return nums;
int[][] res = new int[r][c];
int[] temp = new int[nums.length * nums[0].length];
int count = 0;
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[0].length; j++) {
temp[count++] = nums[i][j];
}
}
count = 0;
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
res[i][j] = temp[count++];
}
}
return res;
}
}
改进代码:
public class Solution {
public int[][] matrixReshape(int[][] nums, int r, int c) {
int n = nums.length, m = nums[0].length, k = 0;
if (r*c != n*m) return nums;
int[][] res = new int[r][c];
for (int i=0;i<r;i++)
for (int j=0;j<c;j++,k++)
res[i][j] = nums[k/m][k%m];
return res;
}
}
思考
第一个代码的填充确实弄复杂了一些,利用k/m和k%m可以很好解决新矩阵的行号和列号问题