重塑矩阵
解法一
-
解题思路:
- 把二维数组变成一位数组;
- 然后 2 层循环赋值;
-
复杂度:
- 时间复杂度:O(rc);
- 空间复杂度:O(1),这里的空间复杂度不包含返回的重塑矩阵需要的空间;
-
代码实现:
const matrixReshape = (mat, r, c) => { const newMat = []; // 将二维数组转化为一维数组 for (let i = 0; i < mat.length; i++) { newMat.push(...mat[i]); } // 判断能否重塑成功 if (r * c !== newMat.length) return mat; // 一共有r行 for (let i = 0; i < r; i++) { const item = []; // 每行c个 for (let j = 0; j < c; j++) { // 将c个元素从头部拿出,并放入暂存的item数组 item.push(newMat.shift()); } // 当前行收集完毕,推入新数组的尾部 newMat.push(item); } return newMat; };
解法二(优化)
-
解题思路:
- 行数:i/每组里面的个数;
- 每行的元素序号:i%每组里面的个数;
-
复杂度:
- 时间复杂度:O(rc);
- 空间复杂度:O(1),这里的空间复杂度不包含返回的重塑矩阵需要的空间;
-
代码实现:
var matrixReshape = function (nums, r, c) { const row = nums.length; const col = nums[0].length; // 判断能否重塑成功 if (row * col != r * c) return nums; // 生成一个 row*col 的二维数组,以 0 填充 const ans = new Array(r).fill(0).map(() => new Array(c).fill(0)); for (let i = 0; i < row * col; ++i) { ans[Math.floor(i / c)][i % c] = nums[Math.floor(i / col)][i % col]; } return ans; };
打赏作者
您的打赏是我前进的动力
微信
支付宝
leetcode🧑💻 154. 寻找旋转排序数组中的最小值 II
上一篇
评论