这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战。
重塑矩阵
题目
在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。
给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
示例 1:
输入:mat = [[1,2],[3,4]], r = 1, c = 4
输出:[[1,2,3,4]]
示例 2:
输入:mat = [[1,2],[3,4]], r = 2, c = 4
输出:[[1,2],[3,4]]
方法
思路:
- 将给的原始矩阵转换成一维数组;
- 判断一维数组的长度跟
r*c是否相同,若不同,则不满足reshape操作的条件,返回原数组; - 遍历一维数组,使用
slice拷贝i*c到i*c+c的数组,放到结果数组中。
代码:
/**
* @param {number[][]} mat
* @param {number} r
* @param {number} c
* @return {number[][]}
*/
var matrixReshape = function(mat, r, c) {
const originArr = mat.join(',').split(',')
if(r*c !== originArr.length) return mat
const res = []
for(let i =0; i<r;i++) {
let tmp = originArr.slice(i*c, i*c+c)
res.push(tmp)
}
return res
};
结果:
- 执行结果: 通过
- 执行用时:72 ms, 在所有 JavaScript 提交中击败了98.76%的用户
- 内存消耗:45.3 MB, 在所有 JavaScript 提交中击败了5.09%的用户
- 通过测试用例:57 / 57
杨辉三角
题目
方法一
思路:
- 定义一个方法
combination来根据行列计算对应的数值 - 二重循环,计算每一行对应的数组,放入结果数组中
代码:
/**
* @param {number} numRows
* @return {number[][]}
*/
function combination(m,n){
if(n === 0) return 1;//第一个数为1
else if(m === n) return 1; //最后一个数为1
else return combination(m-1,n-1) + combination(m-1,n);//中间的数为前一行的两个数相加
}
var generate = function(numRows) {
const res = []
for( var i = 0 ; i < numRows ; i++ ){
let arr=[];//用来放第i行的数
for ( var j = 0 ; j <= i ; j++ ) {
arr.push(combination(i,j));
}
res.push(arr)
}
return res
};
结果:
- 执行结果: 通过
- 执行用时:8888 ms, 在所有 JavaScript 提交中击败了 7.93% 的用户
- 内存消耗:41 MB, 在所有 JavaScript 提交中击败了 8.74% 的用户
- 通过测试用例:14 / 14
方法二
思路:
- 二重循环,第一项最后一项为1。
res[i][j] = res[i - 1][j] + res[i - 1][j - 1]
代码:
/**
* @param {number} numRows
* @return {number[][]}
*/
var generate = function(numRows) {
const res = new Array()
for (let i = 0; i < numRows; i++) {
res[i] = new Array()
for (let j = 0; j <= i; j++) {
if (j === 0 || i === 0 || i === j) {
res[i][j] = 1
} else {
res[i][j] = res[i - 1][j] + res[i - 1][j - 1]
}
}
}
return res
};
结果:
- 执行结果: 通过
- 执行用时:72 ms, 在所有 JavaScript 提交中击败了 98.76% 的用户
- 内存消耗:45.3 MB, 在所有 JavaScript 提交中击败了 5.09% 的用户
- 通过测试用例:57 / 57