0566. 重塑矩阵【简单】
1. 📝 题目描述
在 MATLAB 中,有一个非常有用的函数 reshape,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。
给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
示例 1:

txt
输入:mat = [[1,2],[3,4]], r = 1, c = 4
输出:[[1,2,3,4]]1
2
2
示例 2:

txt
输入:mat = [[1,2],[3,4]], r = 2, c = 4
输出:[[1,2],[3,4]]1
2
2
提示:
m == mat.lengthn == mat[i].length1 <= m, n <= 100-1000 <= mat[i][j] <= 10001 <= r, c <= 300
2. 🎯 s.1 - 暴力解法
js
/**
* @param {number[][]} mat
* @param {number} r
* @param {number} c
* @return {number[][]}
*/
var matrixReshape = function (mat, r, c) {
// 获取原矩阵的行数和列数
const m = mat.length
const n = mat[0].length
// 如果元素总数不匹配,无法重塑,返回原矩阵
if (m * n !== r * c) {
return mat
}
// 创建新的 r x c 矩阵
const reshaped = new Array(r)
for (let i = 0; i < r; i++) {
reshaped[i] = new Array(c)
}
// 按行遍历顺序填充新矩阵
for (let i = 0; i < m * n; i++) {
// 原矩阵中的位置
const originalRow = Math.floor(i / n)
const originalCol = i % n
// 新矩阵中的位置
const newRow = Math.floor(i / c)
const newCol = i % c
// 将元素从原位置复制到新位置
reshaped[newRow][newCol] = mat[originalRow][originalCol]
}
return reshaped
}
// 简化写法:
// var matrixReshape = function (mat, r, c) {
// const m = mat.length
// const n = mat[0].length
// // 如果元素总数不匹配,返回原矩阵
// if (m * n !== r * c) {
// return mat
// }
// // 将原矩阵扁平化为一维数组
// const flat = mat.flat()
// // 构造新矩阵
// const result = []
// for (let i = 0; i < r; i++) {
// result.push(flat.slice(i * c, (i + 1) * c))
// }
// return result
// }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60