题目
在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。
给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
示例 1:
输入:mat = [[1,2],[3,4]], r = 1, c = 4 输出:[[1,2,3,4]]
示例 2:
输入:mat = [[1,2],[3,4]], r = 2, c = 4 输出:[[1,2],[3,4]]
思路
方法一:
将二维数组转换成一维数组,再将一维数组转换成所需要的二维数组
法二:
不需要转成一维数组,直接将原来的二维数组依次赋值给新的二维数组
代码
法一:
class Solution {
public int[][] matrixReshape(int[][] mat, int r, int c) {
int i = mat.length;
int j = mat[0].length;
if((r == 0 || c == 0) || r * c != i * j || (r == i && j == c)){
return mat;
}
int[] temp = new int[r * c];
int index = 0;
//转换成一维数组
for(int k = 0;k < i;k++){
for(int p = 0;p <j;p++){
temp[index] = mat[k][p];
index++;
}
}
int[][] res = new int[r][c];
//再转成题目所需的二维数组
for(int k = 0; k < r;k++){
for(int p = 0;p < c; p++){
res[k][p] = temp[k*c+p];
}
}
return res;
}
}
法二:
class Solution {
public int[][] matrixReshape(int[][] mat, int r, int c) {
int i = mat.length;
int j = mat[0].length;
if(r * c != j * i || (r == 0 || c == 0) || (i == r && j == c)){
return mat;
}
int row = 0;//hang
int col = 0;//lie
int[][] res = new int[r][c];
//直接将原来的二维数组依次赋值给新的二维数组
for(int k = 0;k < i;k++){
for(int p = 0;p < j;p++){
res[row][col] = mat[k][p];
col++;
if(col == c){
col = 0;
row++;
}
}
}
return res;
}
}
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reshape-the-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。