前端算法-爬楼梯

235 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第24天,点击查看活动详情

题目

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

输入: n = 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 12. 1 阶 + 23. 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;
};

坚持努力,无惧未来!