文章目录
杨辉三角
javascript
var generate = function(numRows) {
//先定义一个空数组
var ret=[];
//遍历行数
for(let i =0;i<numRows;i++){
var cow=new Array(i+1).fill(1)//定义行内数组数,有多少numrows,就有几个数组里面
for(let j=1;j<cow.length-1;j++){
//内循环遍历,从数组的第二项插入数,数组的第二项为上一行数组的第一项,加第二项;
//数组的第三项为上一行数组的第二项加第三项
cow[j]=ret[i-1][j]+ret[i-1][j-1]
}
//把每一项推到行内
ret.push(cow)
}
//返回最外层数组
return ret
};
杨辉三角2
javascript
var getRow = function(rowIndex) {
//先定义一个空数组
var ret=[];
//遍历行数
for(let i =-1;i<rowIndex;i++){
var cow=new Array(i+2).fill(1)
for(let j=1;j<cow.length-1;j++){
cow[j]=ret[i][j]+ret[i][j-1]
}
//把每一项推到行内
ret.push(cow)
}
//返回最外层数组
return ret
}
爬楼梯
javascript
//爬楼梯,递归算法
var climbStairs = function(n) {
//爬一层有一种方法
if(n==1){
return 1
}
//爬二层有两种方法
if(n==2){
return 2
}
return climbStairs(n-1)+climbStairs(n-2)
};
最小花费爬楼梯
javascript
var minCostClimbingStairs = function(cost) {
//n为楼顶
const n = cost.length
//dp[i]表示到达下标为i的最小花费
const dp = new Array(n + 1);
//可以选择下标为0或1作为初始台阶
dp[0]=dp[1]=0;
for(let i = 2;i<=n;i++){
//dp[i-1]达到位置为i-1的花费,cost[i-1]为达到i的花费,即i-1所代表的值
dp[i] = Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
}
return dp[n]
};
斐波那契数列
javascript
//最基本的递归算法
var fib = function(n) {
if(n<2){return n}
return fib(n-1)+fib(n-2)
};
比特位计数
javascript
function searchone(shuzi,target){
let sum=0;
let str=shuzi.toString();
for(key of str){
if(key==target){
sum++
}
}
return sum
}
var countBits = function(n) {
var arr=new Array(n+1)
arr[0]=0
for(let i=1;i<arr.length;i++){
arr[i]=searchone(i.toString(2),1)
}
return arr
}
不同路径
javascript
var uniquePaths = function(m, n) {
const f = new Array(m).fill(0).map(() => new Array(n).fill(0));
for (let i = 0; i < m; i++) {
f[i][0] = 1;
}
for (let j = 0; j < n; j++) {
f[0][j] = 1;
}
for (let i = 1; i < m; i++) {
for (let j = 1; j < n; j++) {
f[i][j] = f[i - 1][j] + f[i][j - 1];
}
}
return f[m - 1][n - 1];
};