mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 15:45:40 +08:00
Merge pull request #1171 from liumingzhuo/master
Update 0332.重新安排行程.md Go版本
This commit is contained in:
@ -342,6 +342,64 @@ class Solution:
|
||||
return path
|
||||
```
|
||||
|
||||
### Go
|
||||
```go
|
||||
type pair struct {
|
||||
target string
|
||||
visited bool
|
||||
}
|
||||
type pairs []*pair
|
||||
|
||||
func (p pairs) Len() int {
|
||||
return len(p)
|
||||
}
|
||||
func (p pairs) Swap(i, j int) {
|
||||
p[i], p[j] = p[j], p[i]
|
||||
}
|
||||
func (p pairs) Less(i, j int) bool {
|
||||
return p[i].target < p[j].target
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
targets[ticket[0]] = append(targets[ticket[0]], &pair{target: ticket[1], visited: false})
|
||||
}
|
||||
for k, _ := range targets {
|
||||
sort.Sort(targets[k])
|
||||
}
|
||||
result = append(result, "JFK")
|
||||
var backtracking func() bool
|
||||
backtracking = func() bool {
|
||||
if len(tickets)+1 == len(result) {
|
||||
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
|
||||
}
|
||||
result = result[:len(result)-1]
|
||||
pair.visited = false
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
backtracking()
|
||||
|
||||
return result
|
||||
}
|
||||
```
|
||||
|
||||
### C语言
|
||||
|
||||
```C
|
||||
|
Reference in New Issue
Block a user