dengxinyi vor 6 Jahren
Ursprung
Commit
34d9ac59d6
1 geänderte Dateien mit 34 neuen und 0 gelöschten Zeilen
  1. 34 0
      hard/403.frog-jump.go

+ 34 - 0
hard/403.frog-jump.go

@@ -0,0 +1,34 @@
+func canCross(stones []int) bool {
+	n := len(stones)
+	m := make(map[int]int)
+	for i := 1; i < n; i++ {
+		m[stones[i]] = i
+	}
+	steps := make([][]int, n)
+	steps[0] = []int{0}
+	return dfs(stones, m, n, 0, &steps)
+}
+
+func dfs(stones []int, m map[int]int, n, i int, steps *[][]int) bool {
+	if i == n-1 {
+		return true
+	}
+	for _, l := range (*steps)[i] {
+		for j := maxInt(1, l-1); j <= l+1; j++ {
+			if idx, ok := m[stones[i]+j]; ok {
+				(*steps)[idx] = append((*steps)[idx], j)
+				if dfs(stones, m, n, idx, steps) {
+					return true
+				}
+			}
+		}
+	}
+	return false
+}
+
+func maxInt(x, y int) int {
+	if x < y {
+		return y
+	}
+	return x
+}