[leetcode]——重塑矩阵 java解法

重塑矩阵

在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。

给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 rc ,分别表示想要的重构的矩阵的行数和列数。

重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。

如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

个人对题目的理解:

1.重塑矩阵的意思就是 矩阵中的元素以及元素个数不变化,变化的只是矩阵的形状。比如以前矩阵是两行四列,那就是总共有8个元素,改变其形状,可变成一行八列。

2.需要有一个前提条件,那就是变换前后的矩阵元素个数要相等,如果相等对矩阵进行变换,如果两个矩阵元素不相等,则返回原始矩阵

3.这里有一个简单的数学问题,是我这个编程小白不懂的地方。

!!!!!!元素编号从0开始,已知第i个元素,想知道第i个元素在矩阵中的位置,若矩阵为c行r列,则第i个元素的位置是(i/c, i%c)即对其取整为行,取余为列

思路:

1.根据题目要求,我们可以一开始先判断转换后矩阵的维度是否匹配转换前矩阵的维度,如果不匹配则直接返回输入矩阵即可
2.新建一个矩阵作为返回值
3.遍历 r x c 个元素的同时找到两个矩阵间对应的位置。这是一个简单的除法问题:已知第i个元素,求在矩阵r行c列中的位置,即为i / c 行和 i % c 列。

 

class Solution {
    public int[][] matrixReshape(int[][] mat, int r, int c) {
        //m是mat矩阵的行  n为mat矩阵的列数
        int m = mat.length;
        int n = mat[0].length;
        //判断原始矩阵和新矩阵的元素个数是否相等  若不相等则返回原始矩阵
        if(m*n != r*c){
            return mat;
        }
        //定义一个新的动态数组用来存放重塑矩阵
        int ans[][] = new int[r][c];
        //遍历原始矩阵
        for(int x = 0; x < m*n; ++x){
        //第x个元素的位置计算方法是对列取整取余为新矩阵的行列
            ans[x/c][x%c] = mat[x/n][x%n];
        }
        return ans;
    }
}

思路来源于力扣官网:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值