看了【代码随想录】的文章后,我发觉可以用动态规划求解的题大部分都可以用回溯算法来求解。不过网上对于爬楼梯和斐波那契数列的求解基本都用动态规划来解,那我就提供一个不一样的思路吧
详细的解释都在代码中了
let n = 8
//回溯法暴力求解
let tempPack = []
let maxValue = 0
//确定回溯函数的参数和返回值,n是要到的阶层,k是要爬的阶层,startIndex是目前所在的阶层
function backtracking(n,startIndex) {
//确定边界条件,当爬到n阶层的时候结束并记录,爬超过的时候就返回且什么也不做
if (startIndex > n){
return
} else if (startIndex === n) {
console.log(tempPack,'\n')
maxValue ++
return
}
//单层搜索的过程,因为永远都有两种选择,
// 而且一开始的选择肯定是1(你想倒着写从2开始也行),
// 所以let i = 1。然后选完1后再选2
for(let i = 1;i<=2;i++){
tempPack.push(i)
backtracking(n,startIndex+i)
//回溯:返回之前的状态
tempPack.pop()
}
}
function combine() {
backtracking(n,1)
console.log(maxValue)
}
combine()