1、题目介绍
在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。
给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
简单来说就是将一个二维数组mat转换成一个有 r 行 c 列的一个新二维数组!!
2、思路分析
首先明白 元素与数组的映设关系,mat 数组为 row 行,col 列
★★★ 那么第 i 个元素与数组的映射关系为:
拿上图中第二个元素的3【下标从0开始】来说: 2 / 2 = 1,2%2 =0,所以3在mat [1][0] 的位置上
代码:
private static int[][] matrixReshape(int[][] mat, int r, int c) {
//记录原始数组的行和列数
int row = mat.length;
int col = mat[0].length;
int[][] matrix = new int[r][c];
//判断新矩阵能存放的元素个数是否与原数组相符
if (row * col != r * c) {
return mat;
}
for (int i = 0; i < row * col; i++) {
matrix[i / c][i % c] = mat[i / col][i % col];
}
return matrix;
}