java数据结构与算法刷题-----LeetCode566. 重塑矩阵

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

在这里插入图片描述

1. 法一,下标填充

代码:时间复杂度O(r*c).除题目要求外,算法本身没有需要额外空间,空间复杂度O(1)

在这里插入图片描述

class Solution {
    public int[][] matrixReshape(int[][] mat, int r, int c) {
        int matR = mat.length,matC = mat[0].length;//获取原矩阵的行和列数
        if(r*c != matR*matC) return mat;//如果不合理,直接返回原始矩阵
        int[][] ans = new int[r][c];//如果合理,创建需要重塑的矩阵容器
        int ansI = 0, ansJ = 0;//重塑矩阵专用的两个下标,代表行和列
        for(int i = 0;i<matR;i++){//依次遍历原矩阵元素,按行遍历
            for(int j = 0;j<matC;j++){//依次从左到右遍历原矩阵元素
                ans[ansI][ansJ] = mat[i][j];//将其放到重塑矩阵
                if(ansJ==c-1){//如果重塑矩阵当前行放满了
                    ansI++;//转到下一行
                    ansJ = 0;//转到第一列
                }else ansJ++;//如果重塑矩阵当前行没放满,去往当前行下一列(下一个位置放)
            }
        }
        return ans;
    }
}

2. 法二:数学除法和取余

在这里插入图片描述

  1. 从0开始算,一个3列n行矩阵中,每行就有3个元素,我们从头开始数,第15个元素,在第几行?当然是15/3=5
  2. 知道是第5行,那么在第5行的第几列呢?当然是让它15%3 = 0; 也就是放在第0个位置,也就是[5][0]位置
  3. 如果我们将其放到4列n行矩阵中,每行有4个元素,从头开始算,第15个元素在第几行?当然是15/4 = 3
  4. 第几列呢?15%4 = 3. 也就是[3][3]位置
代码:时间复杂度O(r*c).除题目要求外,算法本身没有需要额外空间,空间复杂度O(1)

在这里插入图片描述

class Solution {
    //从0开始算,一个3列n行矩阵中,每行就有3个元素,我们从头开始数,第15个元素,在第几行?当然是15/3=5
    //知道是第5行,那么在第5行的第几列呢?当然是让它15%3 = 0; 也就是放在第0个位置,也就是[5][0]位置
    //如果我们将其放到4列n行矩阵中,每行有4个元素,从头开始算,第15个元素在第几行?当然是15/4 = 3
    //第几列呢?15%4 = 3. 也就是[3][3]位置
    public int[][] matrixReshape(int[][] mat, int r, int c) {
        int matR = mat.length,matC = mat[0].length;//获取原矩阵的行和列数
        if(r*c != matR*matC) return mat;//如果不合理,直接返回原始矩阵
        int[][] ans = new int[r][c];//如果合理,创建需要重塑的矩阵容器
        //利用除法和取余,获取每个元素应该在的位置
        for(int i = 0; i< matR*matC;i++) ans[i/c][i%c] = mat[i/matC][i%matC];
        return ans;
    }
}
  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

殷丿grd_志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值