JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2022-09-15
目录

重塑矩阵Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

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

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

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

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

示例 1:

输入:mat = [[1,2],[3,4]], r = 1, c = 4
输出:[[1,2,3,4]]

示例 2:

输入:mat = [[1,2],[3,4]], r = 2, c = 4
输出:[[1,2],[3,4]]

提示:

  • m == mat.length
  • n == mat[i].length
  • 1 <= m, n <= 100
  • -1000 <= mat[i][j] <= 1000
  • 1 <= r, c <= 300

# 思路

不管目标矩阵是什么样的,都先将原来的矩阵转成一维数组,然后再将数组转换成目标矩阵

# 解法


class Solution {
    // 不管目标矩阵是什么样的,都先将原来的矩阵转成一维数组,然后再将数组转换成目标矩阵
    public int[][] matrixReshape(int[][] mat, int r, int c) {

        //矩阵的行和列
        int i = mat.length;
        int j = mat[0].length;
        //不可操作,返回原矩阵
        if(r == 0 || c == 0 || (r == i && c == j)||((i * j) != (r * c))){
            return mat;
        }

        int[][] res = new int[r][c];

        int[] temp = new int[r * c];
        int index = 0;

        //不管目标矩阵是什么样的,先将原矩阵转换成数组,然后再转换成目标矩阵
        for(int k = 0; k < i; k++){
            for(int p = 0; p < j; p++){
                temp[index++] = mat[k][p];
            }
        }

        //数组转换成矩阵,容易找到下标的规律,而且可以减少循环的层数
        for(int k = 0; k < r; k++){
            for(int p = 0; p < c; p++){
                res[k][p] = temp[k * c + p];
            }
        }

        return res;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
最近更新
01
1686. 石子游戏VI Java
08-18
02
1688. 比赛中的配对次数 Java
08-18
03
1687. 从仓库到码头运输箱子 Java
08-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式