diff --git "a/problems/0332.\351\207\215\346\226\260\345\256\211\346\216\222\350\241\214\347\250\213.md" "b/problems/0332.\351\207\215\346\226\260\345\256\211\346\216\222\350\241\214\347\250\213.md"
index fcdb6a33ed..33d75f679c 100644
--- "a/problems/0332.\351\207\215\346\226\260\345\256\211\346\216\222\350\241\214\347\250\213.md"
+++ "b/problems/0332.\351\207\215\346\226\260\345\256\211\346\216\222\350\241\214\347\250\213.md"
@@ -477,59 +477,69 @@ class Solution:
 
 ### Go
 ```go
-type pair struct {
-	target  string
-	visited bool
+type SortedMap struct {
+	toes   []string       // 有序键序列
+	values map[string]int // 实际键值对
 }
-type pairs []*pair
 
-func (p pairs) Len() int {
-	return len(p)
+func NewSortedMap() *SortedMap {
+	return &SortedMap{
+		toes:   []string{},
+		values: make(map[string]int),
+	}
 }
-func (p pairs) Swap(i, j int) {
-	p[i], p[j] = p[j], p[i]
+
+func (s *SortedMap) Set(to string) {
+	if _, ok := s.values[to]; !ok {
+		s.toes = append(s.toes, to)
+	}
+	s.values[to]++
 }
-func (p pairs) Less(i, j int) bool {
-	return p[i].target < p[j].target
+
+func (s *SortedMap) Sort() {
+	sort.Sort(sort.StringSlice(s.toes))
+	return
 }
 
 func findItinerary(tickets [][]string) []string {
-	result := []string{}
-	// map[出发机场] pair{目的地,是否被访问过}
-	targets := make(map[string]pairs)
-	for _, ticket := range tickets {
-		if targets[ticket[0]] == nil {
-			targets[ticket[0]] = make(pairs, 0)
+
+	targetsMap := make(map[string]*SortedMap)
+	for _, pair := range tickets {
+		from, to := pair[0], pair[1]
+		if _, ok := targetsMap[from]; !ok {
+			targetsMap[from] = NewSortedMap()
 		}
-		targets[ticket[0]] = append(targets[ticket[0]], &pair{target: ticket[1], visited: false})
+		targetsMap[from].Set(to)
 	}
-	for k, _ := range targets {
-		sort.Sort(targets[k])
+	for k, _ := range targetsMap {
+		targetsMap[k].Sort()
 	}
-	result = append(result, "JFK")
-	var backtracking func() bool
-	backtracking = func() bool {
-		if len(tickets)+1 == len(result) {
+
+	res := []string{"JFK"}
+	var bt func() bool
+	bt = func() bool {
+		if len(res) == len(tickets)+1 {
 			return true
 		}
-		// 取出起飞航班对应的目的地
-		for _, pair := range targets[result[len(result)-1]] {
-			if pair.visited == false {
-				result = append(result, pair.target)
-				pair.visited = true
-				if backtracking() {
-					return true
+		start := res[len(res)-1]
+		destinations := targetsMap[start]
+		if destinations != nil {
+			for _, to := range destinations.toes {
+				if destinations.values[to] > 0 {
+					destinations.values[to]--
+					res = append(res, to)
+					if bt() {
+						return true
+					}
+					res = res[:len(res)-1]
+					destinations.values[to]++
 				}
-				result = result[:len(result)-1]
-				pair.visited = false
 			}
 		}
 		return false
 	}
-
-	backtracking()
-
-	return result
+	bt()
+	return res
 }
 ```