LeetCode刷题笔记70题
题目描述:
public int climbStairs(int n) {
//时间超限
/**
* 使用递归时因为每次都要重新计算花费时间和空间大,判定系统会判超时。
*/
// if (n == 0) {
// return 1;
// }
// if (n < 0) {
// return 0;
// }
// int count1 = climbStairs(n-1);
// int count2 = climbStairs(n-2);
//
// return count1+count2;
/**
* 动态规划解题时,因为每次可以走一步或者两步,
* 就是在到达第n层时,
* 可以先到达n-1层然后走一层到达n层,
* 也可以到达n-2层然后走两层到达n层(如果到达n-2层时再走一层的话沦落为n-1层的情况,所以只能走两层),
* 那n-1层之前的走法、n-2层之前的走法也是如此,
* 知道n=1时,有一种走法
* 知道n=2时,有两种走法
* 所以可以开始进行计算下面的层次
* 如n=3时,
* 》n=n-1=2层的时候有两种走法
* 》n=n-1=1层的时候有一种走法
* 得到n=3时有三种走法
* 也就是到达第n层的走法是到达n-1、n-2层走法的和,
*
* */
//动态规划
if (n <= 2) {
return n;
}
int n1 = 1;
int n2 = 2;
int n3 = 0;
for (int i = 3; i <= n; i++) {
n3 = n1 + n2;
n1 = n2;
n2 = n3;
}
return n2;
}