dengxinyi 6 年之前
父節點
當前提交
7f7c8153e8
共有 1 個文件被更改,包括 22 次插入31 次删除
  1. 22 31
      hard/126.go

+ 22 - 31
hard/126.go

@@ -1,9 +1,5 @@
 package main
 
-import (
-	"fmt"
-)
-
 func findLadders(beginWord string, endWord string, wordList []string) (ladders [][]string) {
 	endIdx, listLen := -1, len(wordList)
 	for i := 0; i < listLen; i++ {
@@ -17,15 +13,13 @@ func findLadders(beginWord string, endWord string, wordList []string) (ladders [
 	} // Find end word in word list, if not found, return false
 	adj := make([][]int, listLen)
 	for i := 0; i < listLen; i++ {
-		adj[i] = make([]int, 0)
 		for j := i + 1; j < listLen; j++ {
 			if isConvertible(wordList[i], wordList[j]) {
-				adj[i] = append(adj[i], j)
+				adj[i] = append(adj[i], j) // Dont need to init each row of adj if use append
 				adj[j] = append(adj[j], i)
 			}
 		}
 	} // Create adj matrix
-	fmt.Println(adj)
 	visited := make([]bool, listLen)
 	closest := make([]int, 0)
 	distance := make([]int, listLen) // Distance from begin to word i
@@ -33,10 +27,10 @@ func findLadders(beginWord string, endWord string, wordList []string) (ladders [
 	for i := 0; i < listLen; i++ {
 		prev[i] = make([]int, 0)
 		if isConvertible(beginWord, wordList[i]) {
-			visited[i] = true
 			prev[i] = append(prev[i], -1) // -1 means begin word
 			closest = append(closest, i)
 			distance[i] = 1
+			visited[i] = true
 		}
 	} // Init closest array
 	for distance[endIdx] == 0 && len(closest) != 0 {
@@ -57,20 +51,17 @@ func findLadders(beginWord string, endWord string, wordList []string) (ladders [
 		}
 		closest = newClosest
 	}
-	fmt.Println(prev)
-	var getLadders func(int, []string)
+	var getLadders func(int, []string) // Get ladders from prev path
 	getLadders = func(idx int, ladder []string) {
-		newLadder := make([]string, len(ladder))
-		copy(newLadder, ladder)
+		var newLadder []string
 		if idx == -1 {
-			newLadder = append(newLadder, beginWord)
-			for beg, end := 0, len(newLadder)-1; beg < end; beg, end = beg+1, end-1 {
-				newLadder[beg], newLadder[end] = newLadder[end], newLadder[beg]
-			}
+			newLadder = []string{beginWord}
+			newLadder = append(newLadder, ladder...)
 			ladders = append(ladders, newLadder)
 			return
 		}
-		newLadder = append(newLadder, wordList[idx])
+		newLadder = []string{wordList[idx]}
+		newLadder = append(newLadder, ladder...)
 		for i := range prev[idx] {
 			getLadders(prev[idx][i], newLadder)
 		}
@@ -92,17 +83,17 @@ func isConvertible(a, b string) bool {
 	return diff == 1
 }
 
-func main() {
-	fmt.Println(findLadders(
-		"hit",
-		"cog",
-		[]string{"hot", "dot", "dog", "lot", "log", "cog"}))
-	fmt.Println(findLadders(
-		"hit",
-		"cog",
-		[]string{"hot", "dot", "dog", "lot", "log"}))
-	fmt.Println(findLadders(
-		"hot",
-		"dog",
-		[]string{"hot", "dog", "dot"}))
-}
+// func main() {
+// 	fmt.Println(findLadders(
+// 		"hit",
+// 		"cog",
+// 		[]string{"hot", "dot", "dog", "lot", "log", "cog"}))
+// 	fmt.Println(findLadders(
+// 		"hit",
+// 		"cog",
+// 		[]string{"hot", "dot", "dog", "lot", "log"}))
+// 	fmt.Println(findLadders(
+// 		"hot",
+// 		"dog",
+// 		[]string{"hot", "dog", "dot"}))
+// }