问题:一个人爬楼梯,每次只能爬1个或2个台阶,假设有n个台阶,那么这个人有多少种不同的爬楼梯方法?
1.递归
public int upStatir(int n){
if (n == 1) {
return 1;
}
if (n == 2) {
return 2;
}
return upStatir(n-1) + upStatir(n-2);
}
时间复杂度:O(2^N) 空间复杂度时间复杂度:O(N)
2.动态规划
public int f(int n) {
if (n == 1) return 1;
if (n == 2) return 2;
// a 保存倒数第二个子状态数据,b 保存倒数第一个子状态数据, temp 保存当前状态的数据
int a = 1, b = 2;
int temp = a + b;
for (int i = 3; i <= n; i++) {
temp = a + b;
a = b;
b = temp;
}
return temp;
}
时间复杂度:O(N) 空间复杂度时间复杂度:O(1)
比递归降低了空间复杂度,时间复杂度
预告下一期:背包问题