题目:566. 重塑矩阵
方法1 二维数组的一维表示
1、思路:
二维数组转成了一维数组,再把一维数组转为二维数组,通过 一维数组下标x 与 二维数组列row 间存在的关系得:
m a t ( m i , n j ) ⟹ m i ∗ n + n j ⏟ x ⟹ a r r ( r i , c j ) mat\lparen m_i,n_j\rparen \implies \underbrace{m_i*n+n_j}_{\text{x}} \implies arr\lparen r_i,c_j \rparen mat(mi,nj)⟹x mi∗n+nj⟹arr(ri,cj)
{ m i = x / n n j = x % n − − − − − − − { c i = x / c c j = x % c \begin{cases} m_i=x/n \\ n_j=x\%n \end{cases}------- \begin{cases} c_i=x/c \\ c_j=x\%c \end{cases} {mi=x/nnj=x%n−−−−−−−{ci=x/ccj=x%c
2、算法
(1) 判断r,c是否可行
- 可行:则输出新的重塑矩阵
- 不可行:输出原始矩阵。
(2) 循环转换数组:
- 公式:arr[i / c][i % c] = mat[i / n][i % n];
- 计算顺序:0~n*m个元素
3、java代码
class Solution {
public int[][] matrixReshape(int[][] mat, int r, int c) {
int m = mat.length;
int n = mat[0].length;
//判断r,c是否合法:
if (r * c != m * n) {
return mat;
}
int[][] arr = new int[r][c];
//循环转换数组
for (int i = 0; i < c * r; i++) {
arr[i / c][i % c] = mat[i / n][i % n];
}
return arr;
}
}