566. 重塑矩阵
解题思路
第一种解法,以空间换时间,时间复杂度是O(mn),空间复杂度是O(mn)
- 首先如果m * n != r * c,则无法进行矩阵的重塑,所以直接返回mat
- 先将m * n的二维数组转换为一维数组,存储数据
- 创建结果二维数据result[r][c],遍历一维数组,进行数据赋值
思考:第一种解法,时间上遍历了两次二维数据,空间上使用了一维数组的转换,不可以直接从输入二维数组转换为目标二维数组吗?
第二种解法
1.不再转换为一维数组,直接遍历输入的二维数组,对目标二维数组进行赋值
解题遇到的问题
1.无
后续需要总结学习的知识点
1.在 MATLAB 中,函数 reshape的实现逻辑是怎么样的?
##解法1
class Solution {
public int[][] matrixReshape(int[][] mat, int r, int c) {
int m = mat.length;
int n = mat[0].length;
if (m * n != r * c) {
return mat;
} else {
int[][] result = new int[r][c];
int[] a = new int[m * n];
int k = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
a[k] = mat[i][j];
k++;
}
}
k = 0;
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
result[i][j] = a[k];
k++;
}
}
return result;
}
}
}
##解法2
class Solution {
public int[][] matrixReshape(int[][] mat, int r, int c) {
int m = mat.length;
int n = mat[0].length;
if (m * n != r * c) {
return mat;
} else {
int[][] result = new int[r][c];
int rtemp = 0;
int ctemp = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
result[rtemp][ctemp] = mat[i][j];
ctemp++;
if (ctemp == c) {
rtemp++;
ctemp = 0;
}
}
}
return result;
}
}
}
网友评论