一、题目描述
在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
二、解题思路
可以声明一个二维矩阵,矩阵大小r*n;依次遍历mat矩阵中的每一个值,将每个值依次赋给声明的这个矩阵。
三、代码演示
class Solution {
public int[][] matrixReshape(int[][] mat, int r, int c) {
//计算数组的行数
int m = mat.length;
//数组名[行下标] .length指示该行中的元素个数,这里其实就是列数
int n = mat[0].length;
if(m*n != r*c){
return mat;
}
//声明一个r行n列的二维数组来存放结果
int[][] res = new int[r][c];
//定义res二维数组的索引
int row=0, column=0;
for(int i=0; i<m; i++){
for(int j=0; j<n; j++){
res[row][column] = mat[i][j];
/**
* 每次遍历到一个新位置,列加一,当column+1>=c时,说明到了新数组列的有边界,需要换行,此时row+=1, * column从0开始。
*/
if(column+1<c){
column++;
}else{
//从下一行开始,column从0开始
column = 0;
row++;
}
}
}
return res;
}
}