自己写的暴力算法,没有任何可学习的地方
class Solution {
public int[][] matrixReshape(int[][] mat, int r, int c) {
int r1 = mat.length;
int c2 = mat[0].length;
int kk[][] = new int[r][c];
int[] source =new int[r1*c2];
int k = 0;
int k1 = 0;
if(r1*c2 == r*c){
for(int i=0;i<r1;i++){
for(int j=0;j<c2;j++){
source[k] = mat[i][j];
k++;
}
}
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
kk[i][j]=source[k1];
k1++;
}
}
return kk;
}else{
return mat;
}
}
}
优解
发出代码前先记两个公式吧

这是把二维的地址转到一维

把一维的地址转为二维地址( x 是一维的地址 n是转的二维数组的列数 )
知道这两个公式,我们再来看解法
class Solution {
public int[][] matrixReshape(int[][] nums, int r, int c) {
int m = nums.length;
int n = nums[0].length;
if (m * n != r * c) {
return nums;
}
int[][] ans = new int[r][c];
for (int x = 0; x < m * n; ++x) {//一维的形式进行遍历
ans[x / c][x % c] = nums[x / n][x % n];//一维转二维的方式 除以自己二维数组的列数
}
return ans;
}
}
重点记忆
一维数组与二维数组之间的地址位置转换
本文讲解了如何优化暴力的矩阵重塑算法,通过理解一维到二维地址映射规则,提供了一个更简洁高效的解决方案。重点在于演示地址转换技巧并提升代码可读性。

被折叠的 条评论
为什么被折叠?



