美文网首页
70. 爬楼梯

70. 爬楼梯

作者: 名字是乱打的 | 来源:发表于2021-07-27 23:53 被阅读0次

思路1:递归回溯(超时)

调用链比较深,还需要回溯,用时比较久,不推荐

class Solution {
    int res=0;
    public int climbStairs(int n) {
        getStep(n);
        return res;
    }

    private void getStep(int n) {
        if (n<=1){
            res++;
        }else if (n>=2){
            n-=2;
            getStep(n);
            n+=1;
            getStep(n);
        }
    }
}

思路2:动态规划

思路:

由于我们现在占的台阶可以从前一步跳上来也可以从前两步跳上来,因此有
- f(x)=f(x−1)+f(x−2)
- 这种有明显公式,下一步的结果由上一步决定的一般用动态规划都比较快

- 设r为当前点,q,p为前两个点,则有

代码:

public int climbStairs(int n) {
            //由于我们现在占的台阶可以从前一步跳上来也可以从前两步跳上来,因此有
            // f(x)=f(x−1)+f(x−2)
            //这种下一步的结果由上一步决定的一般用动态规划都比较快
            // 设r为当前点,q,p为前两个点,则有
            int q = 0, p = 0, r = 1;
            for (int i = 1; i <= n; i++) {
                q = p;
                p = r;
                r = q + p;
            }
            return r;
        }

相关文章

网友评论

      本文标题:70. 爬楼梯

      本文链接:https://www.haomeiwen.com/subject/hspamltx.html