Leetcode刷题:动态规划-爬楼梯

题目

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

分析

由题可以知道,爬楼梯一次可以爬1台阶或一次可以爬两台阶。我们使用枚举法可以知道,第一台阶有1种方法,爬两台阶有2两种方法,爬3台阶有3种方法,爬4台阶有5种方法...

到这一步,想必大家已经看出一点端倪了吧,从第3台阶开始,所拥有的方法都是前面两台阶之和。按照这种规律就可以发现第n阶台阶就等于(n-1)台阶的方法数加上(n-2)台阶的方法数。知道了规律那就好办了

那接下来思考的是,在求n阶的时候,前面一共要相加多少次,才能等于n阶的方法数,经过考察可以发现一共需要经过n-2次相加,才能得到n阶的方法数,上代码。

代码

public class Word {
	public int res(int n) {
		if (n<=2) {
			return n;
		}
		int first = 1;//第一台阶的方法数
		int second = 2;//第二台阶的方法数
		
		for (int i = 0; i < n-2; i++) {//遍历n-2次相加
			int sum = first + second;
			first = second;//first向前移动一位
			second = sum;//second向前移动一位
			
		}
		return second;
		
	}

}

结语

其实看到这道题的时候,我想到了斐波那契数列,可真没想到这题和斐波那契数列如此相似,如果做过斐波那契数列的对于这题应该都没问题,没做过的,了解这题之后,建议去刷一下斐波那契数列,加深一下对动态规划的认识。

Guess you like

Origin blog.csdn.net/weixin_51012090/article/details/120978489