[leetcode]70. Climbing Stairs
阿新 • • 發佈:2018-12-17
備忘錄方法(自頂向下的動態規劃)
public class Solution { public int climbStairs(int n) { int memo[] = new int[n + 1]; return climb_Stairs(0, n, memo); } public int climb_Stairs(int i, int n, int memo[]) { if (i > n) { return 0; } if (i == n) { return 1; } //如果計算過,就直接返回 if (memo[i] > 0) { return memo[i]; } //如果沒有計算過,就現計算,然後return memo[i] = climb_Stairs(i + 1, n, memo) + climb_Stairs(i + 2, n, memo); return memo[i]; } }
自底向上的動態規劃
public class Solution { public int climbStairs(int n) { if (n == 1) { return 1; } 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]; } }