力扣Java - 566. 重塑矩阵
重塑矩阵
- 题目描述
- 示例演示
-
-
-
- 示例一
- 示例二
-
-
- 算法思想
- 算法代码
题目描述
- 在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。
- 一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。
- 重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
- 如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
示例演示
示例一
输入:mat = [[1,2],[3,4]], r = 1, c = 4
输出:[[1,2,3,4]]
示例二
输入: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; }}