爬楼梯

89 阅读1分钟

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

思路

我们要从中找出规律,可以在纸上画一下,规律其实不难发现,就是看你怎么把控

  • 第一阶是一种,第二阶是2中,第三阶是3种其实规律已经出来了
  • 第3阶等于第一节加上第二阶的方法种数
  • 我们可以通过一个公司来体现:f(n)=f(n-1)+f(n-2)
  • 这道题解法很多,可以递归,也可以动态规划
  • 递归大家不能想到,但是会出现大量的重复计算,使用动态规划可以将时间复杂度变为o(n)
  • 我们可以用一个dp数组来记录每一次爬楼梯的状态,n阶取出n阶的状态就行
                     /**
                     * @param {number} n
                     * @return {number}
                     */
                    var climbStairs = function(n) { 
                        let dp=[n+1];
                        dp[1]=1;
                        dp[2]=2;
                        for(let i=3;i<=n;i++){
                            dp[i]=dp[i-1]+dp[i-2]
                        }
                        return dp[n];
                    };