Reshape the Matrix

easy array matrix

Problem

Reshape a m×n matrix into r×c if m·n == r·c, preserving row-major order. Otherwise return the original matrix.

Inputmat = [[1,2],[3,4]], r = 1, c = 4
Output[[1,2,3,4]]
For index k, source = mat[k/n][k%n], target = out[k/c][k%c].

def matrix_reshape(mat, r, c):
    m, n = len(mat), len(mat[0])
    if m * n != r * c: return mat
    out = [[0]*c for _ in range(r)]
    for k in range(m*n):
        out[k//c][k%c] = mat[k//n][k%n]
    return out
function matrixReshape(mat, r, c) {
  const m = mat.length, n = mat[0].length;
  if (m * n !== r * c) return mat;
  const out = Array.from({ length: r }, () => new Array(c));
  for (let k = 0; k < m * n; k++) out[(k/c)|0][k%c] = mat[(k/n)|0][k%n];
  return out;
}
class Solution {
    public int[][] matrixReshape(int[][] mat, int r, int c) {
        int m = mat.length, n = mat[0].length;
        if (m * n != r * c) return mat;
        int[][] out = new int[r][c];
        for (int k = 0; k < m * n; k++) out[k/c][k%c] = mat[k/n][k%n];
        return out;
    }
}
vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) {
    int m = mat.size(), n = mat[0].size();
    if (m * n != r * c) return mat;
    vector<vector<int>> out(r, vector<int>(c));
    for (int k = 0; k < m * n; k++) out[k/c][k%c] = mat[k/n][k%n];
    return out;
}
Time: O(m·n) Space: O(m·n)