题目:
题解一:动态规划
dp 方程:dp[n] = dp[n-1] + dp[n-2] (n>=3)
public int climbStairs(int n) {
if (n <= 3) {
return n;
}
int[] arr = new int[n+1];
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
for (int i = 4; i <= n; i++) {
arr[i] = arr[i-1] + arr[i-2];
}
return arr[n];
}
压缩状态:
public int climbStairs(int n) {
if (n <= 3) {
return n;
}
int pre1 = 2;
int pre2 = 3;
int result = pre1+pre2;
for (int i = 4; i < n; i++) {
pre1 = pre2;
pre2 = result;
result = pre1 + pre2;
}
return result;
}
时间复杂度:O(n)
题解二:递归
public int climbStairs(int n) {
if (n <= 3) {
return n;
}
return climbStairs(n-1) + climbStairs(n-2);
}
时间负责度:O()