# 常见算法
在程序中直接或者间接调用自己
# flat 数组拍平
function flat(arr){
const len = arr.length
let flatArr = []
for(let i = 0; i < len; i++){
if(Array.isArray(arr[i])){
flatArr = flatArr.concat(flat(arr[i]))
}else{
flatArr.push(arr[i])
}
}
return flatArr
}
// 元素均为字符串或数字
function flat2(arr){
return arr.toString().split(',')
}
# 爬楼梯
一共N级楼梯,每次能上一级或二级,刚开始在第一级,共有多少种走法。
function cStairs(n){
if(n === 1 || n === 2){
return 1
}else{
return cStairs(n-1) + cStairs(n-2)
}
}
# 斐波那契数列
function fibonacci1(n){
if(n<=1){
return 0
}
return fibonacci1(n-1) + fibonacci1(n-2)
}
function fibonacci2(n){
let i = 0;
let a = 1;
let b = 0;
while(++i<=n){
[a,b] = [b,a+b]
}
return b
}
# 零钱兑换最优解
参考:
var coins = [1,2,4,5]
var amount = 121
function coinChange(coins,amount){
// coins 硬币种类
// amount 总数
// arrs为从0-amount,最优解的数组
var arrs = New Array(amount+1).fill(Infinity)
// 求取0-amount的最优解
for(let i = 0;i<arrs.length;i++){
for(let coin in coins){
if(i-coin>=0){
arrs[i] = Math.min(arr[i],arr[i-coin]+1)
}
}
}
return arrs[i] === Infinity?-1:arrs[i]
}