重塑矩阵

LeetCode每日一题,566. Reshape the Matrix

先看题目描述

ygfdSJ.png

大意就是给定一个矩阵 nums 和整数 r 和 c,让我们将该矩阵重塑成 r 行 c 列,如果不能重塑的话,就返回原矩阵

算法和思路

算法流程

  • 设 nums 矩阵为 m 行 n 列,首先判断 m * n 与 r * c 是否相等,不相等的话就直接返回 nums
  • 相等的话就可以对矩阵进行重塑,先将 nums 矩阵的二维坐标映射为一维坐标,即将 (i,j) 映射为 x = i * n + j,然后将一维坐标映射为重塑矩阵的二维坐标,即将 x 映射到 (x / c,x % c)

算法源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public int[][] matrixReshape(int[][] nums, int r, int c) {
int m = nums.length;
int n = nums[0].length;
if (m * n != r * c) {
return nums;
}
int[][] ans = new int[r][c];
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
int num = i * c + j;
ans[i][j] = nums[num / n][num % n];
}
}
return ans;
}
}