假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例 2:输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/climbing-stairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
拿到这个题目,我其实没思路,然后看了下官方的讲解:
这道题的关键点是递增公式,如果获取了递增公式,这道题就和前一天的斐波那契数的题目一样了 ,所以拿到这道题,应该有拿起手边的纸和笔进行简单的推算,看看是否能找到规律。
由此,我对于无向图与动态规划之间的联系有那么一丝说不清道不明的了解
解题采用之前用的滚动数组,这样时间复杂度能够达到O(n)
class Solution {
public int climbStairs(int n) {
int p=1,q=2,r=0;
if(n<=2)
return n;
for(int i=2;i<n;i++){
r=p+q;
p=q;q=r;
}
return r;
}
}
练习:
答案如上所示
分析如下:
答案如下:
class Solution {
public int minCostClimbingStairs(int[] cost) {
int n=cost.length;
int[] dp=new int[n+1];
dp[0]=0;dp[1]=0;
for(int i=2;i<=n;i++){
dp[i]=Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
}
return dp[n];
}
}
分析出来以后,很明显可以看出,这道题的解题思路和之前都是一样的,获取初始条件和递推公式,然后依次进行计算。
但是,难点,就在分析题目上面,对于这个问题,我的解决办法就是多做一些题目,见得多了,就算不是很理解但是可以触类旁通。
与此同时,如果没有思路的话可以看看别人的思路,然后去理解它。
还有就是如果可以,最好是拿起手边的笔和纸推一推,毕竟想一想当年做高中数学时,那些推到也不是眼睛瞅瞅就能看出来的,还是得动笔哦。