> 文档中心 > 力扣Java - 566. 重塑矩阵

力扣Java - 566. 重塑矩阵

重塑矩阵

  • 题目描述
  • 示例演示
        • 示例一
        • 示例二
  • 算法思想
  • 算法代码

题目描述

  • 在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。
  • 一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。
  • 重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
  • 如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

示例演示

示例一

力扣Java - 566. 重塑矩阵

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

示例二

力扣Java - 566. 重塑矩阵

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

算法思想

  • 该题主要涉及到了二维数组的遍历和赋值操作。
  • 首先遍历二维数组 mat 中的所有元素,然后添加到 ArrayList 集合里。
  • 然后判断 ArrayList 集合中的元素个数是否等于 r * c。如果不等,则说明不能满足reshape 操作,直接将原数组返回。
  • 如果相等,则先按照指定的行数和列数创建一个新的二维数组,然后再将 ArrayList 集合中的元素赋值给新的二维数组即可。

算法代码

class Solution {    public int[][] matrixReshape(int[][] mat, int r, int c) { ArrayList<Integer> list = new ArrayList<>(); for (int i = 0; i < mat.length; i++){     for (int j = 0; j < mat[i].length; j++){  list.add(mat[i][j]);     } } if (r * c != list.size()){     return mat; } int[][] ret = new int[r][c]; int index = 0; for (int i = 0; i < r; i++){     for (int j = 0; j < c; j++){  ret[i][j] = list.get(index);  index++;     } } return ret;    }}