题目地址:
https://www.lintcode.com/problem/climbing-stairs/description
爬楼梯,每次可以爬 1 1 1或 2 2 2步,问爬 n n n阶楼梯有多少种爬法。思路是动态规划,按照最后一步是爬了 1 1 1还是 2 2 2步分类即可。代码如下:
public class Solution {
/**
* @param n: An integer
* @return: An integer
*/
public int climbStairs(int n) {
// write your code here
if (n == 0) {
return 0;
}
int n1 = 1, n2 = 2;
for (int i = 0; i < n - 2; i++) {
n2 += n1;
n1 = n2 - n1;
}
return n == 1 ? n1 : n2;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。