持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第24天,点击查看活动详情
题目
假设你正在爬楼梯。需要
n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?
输入: n = 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶
题解
我们这里先分析下,楼梯有一级时,只有一种爬楼梯方法,当楼梯有两级时,有两种爬楼梯的方法,可以直接爬两级,或者一级一级爬,以此类推,当楼梯有
n级时,爬楼梯的次数等于第n-1级的次数加上第n-2级的次数
根据上述分析,我们在进入函数中先声明两个变量,分别是
n1变量和n2变量,n1变量值为1代表着一级楼梯,n2变量值为2代表着二级楼梯,在声明一个res变量,res变量值默认为0,用于存储爬n级楼梯的多少种方法,在使用if语句进行判断当前出参n是否等于1或等于2,如果为1或者2则直接把当前的出参n返回即可,因为一级楼梯和二级楼梯的爬楼梯方法与楼梯级数所对应,接下来我们使用for循环的方式对出参n进行循环,循环变量i默认值是3,因为三级楼梯有三种爬楼梯方法,变量n1和变量n2相加正好等于三级楼梯的爬楼梯总方法,循环终止条件是当前循环变量i的值等于出参n,在循环中我们将变量n1和变量n2的值相加赋值给res变量,然后再将n2变量值赋值给变量n1,再将变量res变量值赋值给n2,以此去计算出每增加一级楼梯的爬楼梯的方法数,当循环结束后,我们将res变量返回即可
/**
* @param {number} n
* @return {number}
*/
var climbStairs = function(n) {
let n1 = 1;
let n2 = 2;
let res = 0;
if(n == 1||n == 2) {
return n;
}
for(let i=3; i<=n;i++){
res = n1 + n2;
n1 = n2;
n2 = res;
}
return res;
};
坚持努力,无惧未来!