Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit eeba178

Browse files
Merge pull request youngyangyang04#1171 from liumingzhuo/master
Update 0332.重新安排行程.md Go版本
2 parents a842d1f + 8ad1237 commit eeba178

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

problems/0332.重新安排行程.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,64 @@ class Solution:
342342
return path
343343
```
344344

345+
### Go
346+
```go
347+
type pair struct {
348+
target string
349+
visited bool
350+
}
351+
type pairs []*pair
352+
353+
func (p pairs) Len() int {
354+
return len(p)
355+
}
356+
func (p pairs) Swap(i, j int) {
357+
p[i], p[j] = p[j], p[i]
358+
}
359+
func (p pairs) Less(i, j int) bool {
360+
return p[i].target < p[j].target
361+
}
362+
363+
func findItinerary(tickets [][]string) []string {
364+
result := []string{}
365+
// map[出发机场] pair{目的地,是否被访问过}
366+
targets := make(map[string]pairs)
367+
for _, ticket := range tickets {
368+
if targets[ticket[0]] == nil {
369+
targets[ticket[0]] = make(pairs, 0)
370+
}
371+
targets[ticket[0]] = append(targets[ticket[0]], &pair{target: ticket[1], visited: false})
372+
}
373+
for k, _ := range targets {
374+
sort.Sort(targets[k])
375+
}
376+
result = append(result, "JFK")
377+
var backtracking func() bool
378+
backtracking = func() bool {
379+
if len(tickets)+1 == len(result) {
380+
return true
381+
}
382+
// 取出起飞航班对应的目的地
383+
for _, pair := range targets[result[len(result)-1]] {
384+
if pair.visited == false {
385+
result = append(result, pair.target)
386+
pair.visited = true
387+
if backtracking() {
388+
return true
389+
}
390+
result = result[:len(result)-1]
391+
pair.visited = false
392+
}
393+
}
394+
return false
395+
}
396+
397+
backtracking()
398+
399+
return result
400+
}
401+
```
402+
345403
### C语言
346404

347405
```C

0 commit comments

Comments
 (0)