Kaynağa Gözat

add 'Climbing Stairs'

tangs 5 yıl önce
ebeveyn
işleme
ebeec6e6eb
1 değiştirilmiş dosya ile 54 ekleme ve 0 silme
  1. 54 0
      tags/dynamic-programming/climbingStairs/main.go

+ 54 - 0
tags/dynamic-programming/climbingStairs/main.go

@@ -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
+}