LeetCode 566 重塑矩阵
问题描述:
在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
执行用时:2 ms, 在所有 Java 提交中击败了76.66%的用户
内存消耗:40.1 MB, 在所有 Java 提交中击败了5.14%的用户
class Solution {
public int[][] matrixReshape(int[][] nums, int r, int c) {
//矩阵不合法
if(nums==null || nums.length==0 || nums[0].length==0) {
return nums;
}
//元素数量不同
else if(r*c!=nums.length*nums[0].length) {
return nums;
}
//按行填充
int[][] ans = new int[r][c];
int rows = nums.length;
int cols = nums[0].length;
for(int curr=0; curr<rows*cols; curr++) {
//元素在原矩阵中的坐标
int oldRIdx = curr/cols;
int oldCIdx = curr%cols;
//元素在当前矩阵中的坐标
int newRIdx = curr/c;
int newCIdx = curr%c;
//元素转移
ans[newRIdx][newCIdx] = nums[oldRIdx][oldCIdx];
}
return ans;
}
}