0
点赞
收藏
分享

微信扫一扫

LeetCode70.爬楼梯




假设你正在爬楼梯。需要 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 步


解题分析:设n为楼梯阶数,f(n)为爬到楼顶的方法数; 则n=1时,f(n)=1;n=2时,f(n)=2;  n=3时,f(n)=3;.......;通过分析可知

f(n)=f(n-1)+f(n-2);此时能够想到用递归的方法解决,代码如下:

public static int fun1(int n) {
if(n==1||n==2) {
return n;
}
return fun1(n-1)+fun1(n-2);
}

提交答案,结果时间超限

没办法,只能优化代码,采用动态规划的思想改进代码。

class Solution {
private int dp[]=new int[100];
public int climbStairs(int n) {

if(n==1||n==2) {
return n;
}
if(dp[n-1]==0) {
dp[n-1]=climbStairs(n-1);
}
if(dp[n-2]==0) {
dp[n-2]=climbStairs(n-2);
}
return dp[n-1]+dp[n-2];
}
}


结果自然是只能通过了


举报

相关推荐

0 条评论