package leetcode;

import java.util.HashMap;
import java.util.Map;

/**
 * https://leetcode.com/problems/climbing-stairs/
 */
public class Problem70 {
    public int climbStairs(int n) {
        Map<Integer, Integer> memo = new HashMap<>();
        return climbStairs(n, 1, memo) + climbStairs(n, 2, memo);
    }

    private int climbStairs(int n, int accu, Map<Integer, Integer> memo) {
        if (accu == n) {
            return 1;
        } else if (accu > n) {
            return 0;
        } else {
            int x = 0;
            if (memo.containsKey(accu + 1)) {
                x = memo.get(accu + 1);
            } else {
                x = climbStairs(n, accu + 1, memo);
            }
            memo.put(accu + 1, x);
            int y = 0;
            if (memo.containsKey(accu + 2)) {
                y = memo.get(accu + 2);
            } else {
                y = climbStairs(n, accu + 2, memo);
            }
            memo.put(accu + 2, y);
            return x + y;
        }
    }
}
@@ -16,57 +16,8 @@
 e;%0A%0A
-import java.util.HashMap;%0Aimport java.util.Map;%0A%0A
 /**%0A
@@ -139,37 +139,25 @@
         
-Map%3C
 Integer
-, Integer%3E
+%5B%5D
  memo = 
@@ -164,19 +164,22 @@
 new 
-HashMap%3C%3E()
+Integer%5Bn + 1%5D
 ;%0A  
@@ -209,37 +209,8 @@
 s(n,
- 1, memo) + climbStairs(n, 2,
  mem
@@ -232,16 +232,23 @@
 private 
+static 
 int clim
@@ -266,39 +266,17 @@
  n, 
-int accu, Map%3CInteger, Integer%3E
+Integer%5B%5D
  mem
@@ -296,17 +296,13 @@
 if (
-accu == n
+n %3C 0
 ) %7B%0A
@@ -320,17 +320,17 @@
  return 
-1
+0
 ;%0A      
@@ -336,26 +336,27 @@
    %7D
- else if (accu %3E n
+%0A        if (n == 0
 ) %7B%0A
@@ -366,33 +366,33 @@
          return 
-0
+1
 ;%0A        %7D else
@@ -390,396 +390,124 @@
    %7D
- else %7B%0A            int x = 0;%0A            if (memo.containsKey(accu + 1)) %7B%0A                x = memo.get(accu + 1);%0A            %7D else %7B%0A                x = climbStairs(n, accu + 1, memo);%0A            %7D%0A            memo.put(accu + 1, x);%0A            int y = 0;%0A            if (memo.containsKey(accu + 2)) %7B%0A                y = memo.get(accu + 2);%0A            %7D else %7B%0A                y =
+%0A        if (memo%5Bn%5D != null) %7B%0A            return memo%5Bn%5D;%0A        %7D%0A        int count = climbStairs(n - 1, memo) +
  cli
@@ -520,16 +520,10 @@
 rs(n
-, accu +
+ -
  2, 
@@ -541,84 +541,46 @@
     
-    %7D%0A            memo.put(accu + 2, y);%0A            return x + y;%0A        %7D
+memo%5Bn%5D = count;%0A        return count;
 %0A   

Update problem 70