Solution 1 - Flatten and Rebuild
If mn != rc, return original; otherwise fill new matrix row-by-row.
TimeComplexity:O(mn)
SpaceComplexity:O(mn)
function matrixReshape(mat,r,c){
const m=mat.length,n=mat[0].length;
if(m*n!==r*c) return mat;
const flat=mat.flat();
const out=[];
for(let i=0;i<r;i++) out.push(flat.slice(i*c,(i+1)*c));
return out;
}function matrixReshape(mat:number[][], r:number, c:number):number[][]{
const m=mat.length,n=mat[0].length;
if(m*n!==r*c) return mat;
const flat:number[]=mat.flat();
const out:number[][]=[];
for(let i=0;i<r;i++) out.push(flat.slice(i*c,(i+1)*c));
return out;
}package main
func matrixReshape(mat [][]int, r int, c int) [][]int {
m, n := len(mat), len(mat[0])
if m*n != r*c {
return mat
}
flat := make([]int, 0, m*n)
for i := 0; i < m; i++ {
flat = append(flat, mat[i]...)
}
out := make([][]int, r)
for i := 0; i < r; i++ {
out[i] = flat[i*c : (i+1)*c]
}
return out
}
func main() {}fn matrix_reshape(mat: Vec<Vec<i32>>, r: usize, c: usize) -> Vec<Vec<i32>> {
let m = mat.len();
let n = mat[0].len();
if m * n != r * c {
return mat;
}
let flat: Vec<i32> = mat.into_iter().flatten().collect();
(0..r).map(|i| flat[i*c..(i+1)*c].to_vec()).collect()
}
fn main() {}