题目
https://leetcode-cn.com/problems/reshape-the-matrix/
模拟填充
重塑数组的一行填充满后换一行继续填充
class Solution {
public int[][] matrixReshape(int[][] nums, int r, int c) {
int rows = nums.length;
int cols = nums[0].length;
if (rows * cols != r * c) return nums;
int[][] ans = new int [r][c];
int x = 0, y = 0;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
ans[x][y++] = nums[i][j];
if (y == c) {
x++;
y = 0;
}
}
}
return ans;
}
}
二维数组的一维表示
二维数组的坐标为
(
i
,
j
)
(i,j)
(i,j)转化为一维数组的坐标公式为:
i
×
n
+
j
i\times n +j
i×n+j
二维数组坐标对应的一维数组下标
x
x
x转化为二维数组坐标的公式为:
算法:
- 将二维数组映射到一维数组
- 将一维数组映射回 r * c 的二维数组当中
class Solution {
public int[][] matrixReshape(int[][] nums, int r, int c) {
int rows = nums.length;
int cols = nums[0].length;
if (rows * cols != r * c) return nums;
int[][] ans = new int [r][c];
for (int i = 0; i < rows * cols; i++) {
ans[i / c][i % c] = nums[i / cols][i % cols];
}
return ans;
}
}