阅读 61

70. 爬楼梯|Java 刷题打卡

本文正在参加「Java主题月 - Java 刷题打卡」,详情查看 活动链接

一、题目描述

image.png

二、解题思路

这几天的leetcode每日一题都是动态规划,还是hard的。
image.png
还是找个软柿子练练手
image.png

1.动态规划

根据题意我们可以得到状态转换方程f(x)=f(x−1)+f(x−2)。
边界条件f(0)=1,f(1)=1。
由于f(x)只和f(x-1)和f(x-2)相关,因此可以优化辅助空间。

时间复杂度分析

循环执行n次,故时间复杂度为:

  • O(n)

空间复杂度分析

使用的是常量辅助空间,故空间复杂度为:

  • O(1)

三、代码实现

class Solution {
    public int climbStairs(int n) {
        //初始化q=f(0)=1,r=f(1)=1,p是辅助空间
        int p = 0, q = 1, r = 1;
        //从2开始
        for (int i = 2; i <= n; ++i) {
            p = q; 
            q = r; 
            r = p + q;
        }
        return r;
    }
}
复制代码

不晓得我讲清楚了没有,请大家多多指教。
今日打卡结束!

文章分类
后端
文章标签