本文正在参加「Java主题月 - Java 刷题打卡」,详情查看 活动链接
一、题目描述
二、解题思路
这几天的leetcode每日一题都是动态规划,还是hard的。
还是找个软柿子练练手
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;
}
}
不晓得我讲清楚了没有,请大家多多指教。
今日打卡结束!