|
@@ -0,0 +1,54 @@
|
|
|
|
+package main
|
|
|
|
+
|
|
|
|
+import "fmt"
|
|
|
|
+
|
|
|
|
+func main() {
|
|
|
|
+ var n int
|
|
|
|
+
|
|
|
|
+ n = 1
|
|
|
|
+ fmt.Println(climbStairs(n))
|
|
|
|
+
|
|
|
|
+ n = 2
|
|
|
|
+ fmt.Println(climbStairs(n))
|
|
|
|
+
|
|
|
|
+ n = 3
|
|
|
|
+ fmt.Println(climbStairs(n))
|
|
|
|
+
|
|
|
|
+ n = 4
|
|
|
|
+ fmt.Println(climbStairs(n))
|
|
|
|
+
|
|
|
|
+ n = 5
|
|
|
|
+ fmt.Println(climbStairs(n))
|
|
|
|
+
|
|
|
|
+ n = 6
|
|
|
|
+ fmt.Println(climbStairs(n))
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func climbStairs(n int) int {
|
|
|
|
+ if n == 1 {
|
|
|
|
+ return 1
|
|
|
|
+ }
|
|
|
|
+ if n == 2 {
|
|
|
|
+ return 2
|
|
|
|
+ }
|
|
|
|
+ var record = map[int]int{
|
|
|
|
+ 1: 1,
|
|
|
|
+ 2: 2,
|
|
|
|
+ }
|
|
|
|
+ return climbSteps(n, 1, record) + climbSteps(n, 2, record)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func climbSteps(n, step int, record map[int]int) int {
|
|
|
|
+ last := n - step
|
|
|
|
+ if last <= 0 {
|
|
|
|
+ return 0
|
|
|
|
+ }
|
|
|
|
+ v, ok := record[last]
|
|
|
|
+ if ok {
|
|
|
|
+ return v
|
|
|
|
+ }
|
|
|
|
+ num1 := climbSteps(last, 1, record)
|
|
|
|
+ num2 := climbSteps(last, 2, record)
|
|
|
|
+ record[last] = num1 + num2
|
|
|
|
+ return num1 + num2
|
|
|
|
+}
|