版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qfashly/article/details/79852357
在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
public static int[][] matrixReshape(int[][] nums, int r, int c) {
if(nums == null){
return nums;
}
if(r == 0 || c == 0){
return nums;
}
int row = 0;//行
int columns = 0;//列
columns = nums[0].length;
row = nums.length;
if(columns > 100 || row > 100 || columns < 1 || row < 1){
return nums;
}
if(columns * row < r * c){
return nums;
}
int [][]result = new int[r][c];
int rr = 0;
int cc = 0;
int index = 0;
for(int i = 0; i < row; i ++){
for(int j = 0; j < columns; j ++){
index = i * columns + j + 1;
if(index > r * c){
break;
}
rr = index / c;//行
cc = index % c;//列
if(rr > 0 && cc ==0){
rr = rr -1;
cc = c - 1;
}else if(rr > 0 && cc > 0){
cc = cc -1;
}else{
cc = cc -1;
}
result[rr][cc] = nums[i][j];
}
}
return result;
}