题目 : 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。
思路 :
对于这道题目 ,有n阶台阶,全1有一种方法,最多可以踩 n / 2 个 2阶台阶
设 有 x 个2阶台阶 , 那么 1 阶台阶的个数为 n - x 。排列组合有 C(n , x)种排列方式
计算公式 : 设 有 x 个2阶台阶 , 那么 1 阶台阶的个数为 n - x 。排列组合有 C(n , x)种排列方式
//编写一个计算排列组合的函数functionsort( n , x){//计算除数的乘积var chushu =1for(var i =1; i <= x ; i ++){
chushu *=(n - i +1)}//计算被除数的乘积var beichu =1for(var i = x ; i >0; i --){
beichu *= i
}//那么一共的排列组合为var sum = chushu / beichu ;return sum
}// console.log(sort(6,2))varclimbStairs=function(n){//如果n = 1那么直接返回1if(n ===1){return1}//最多能够踩2阶台阶的个数为var x =parseInt(n /2)var count =0;//对于 1 - x的2阶个数,循环求出所有排列组合的和for(var i =1; i <= x ; i ++){//此时的n(总共的 1 ,2 个数 为 最开始的n - 2的个数)
m = n - i;
count +=sort( m , i)//将m重新赋值为最开始的n值
m = n
}//还有全1的一种情况return count +1};