Problem: 70. 爬楼梯
1.定义状态:dp[i]表示第i层台阶有总共有多少种走法;
2.状态初始化:一个台阶时有一种走法,两个台阶时有两种走法,所以dp[1] = 1,dp[2] = 2;
3.状态转移:由于每次只能往上走一步或者两步所以对于第i层台阶来说(i大于等于3)当前的台阶可以由于i-1层台阶往上走一步得到或者i-2层台阶走两步得到所以得到状态转移方程为:dp[i] = dp[i - 1] + dp[i - 2];
时间复杂度:
O ( n ) O(n) O(n);其中n为台阶的大小
空间复杂度:
O ( n ) O(n) O(n)
class Solution {
/**
* Dynamic programing
* @param n The number of stage
* @return int
*/
public int climbStairs(int n) {
if (n <= 2) {
return n;
}
//Record how many moves there are on step i
int[] dp = new int[n + 1];
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; ++i) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
}