LeetCode上重塑矩阵,简单难度重拳出击,记录下解题思路
其实思路不难,主要就2步
- 扁平化整个二维数组
- 根据传入的r,c来截取扁平化后的数组,并且重新组合
对nums进行遍历,每次遍历元素都通过concat
连接到数组上,完成nums的扁平化,这里可以直接用ES6增加的flat()方法来直接扁平化,速度会快很多
上面扁平化完成之后就会得到一个一维数组,只需要按传入c
的长度来截取数组,并且循环r
次就能完成题目
这里使用的splice
方法,会截取[0,c-1]区间的数组,并且还会修改原数组,正好满足需求,用这个可以让代码更少
var matrixReshape = function(nums, r, c) {
// 用n来保存扁平化后的数组
let n = []
// 遍历nums来扁平化数组
nums.forEach((x,i) => {
n = [].concat(n,x)
})
// 也可以flat
// let n = nums.flat()
if(r*c !== n.length) return nums
// 存放结果
let res = []
// 根据传入的rc来重新填充二维数组
for(let i = 0 ; i < r; i++) {
// splice()方法会更改原数组
// 每次截取[0,c]长度的数组,放入res
res.push(n.splice(0,c))
}
return res
};