正常回溯 §
var (
size int
res []string
helper map[string][]string
)
func findItinerary(tickets [][]string) []string {
size = len(tickets)
if size == 0 {
return nil
}
res = make([]string, 0, size + 1)
helper = map[string][]string{}
for _, v := range tickets {
helper[v[0]] = append(helper[v[0]], v[1])
}
for _, v := range helper {
sort.Strings(v)
}
if backtracking("JFK") {
return res
}
return nil
}
func backtracking(start string) bool {
res = append(res, start)
if len(res) == size + 1 {
return true
}
for i, to := range helper[start] {
if to == "" {
continue
}
helper[start][i] = ""
if backtracking(to) {
return true
}
helper[start][i] = to
res = res[:len(res) - 1]
}
return false
}
确定输入数据能有正确返回值 §
var (
helper map[string][]string
res []string
)
func findItinerary(tickets [][]string) []string {
helper = map[string][]string{}
for _, v := range tickets {
helper[v[0]] = append(helper[v[0]], v[1])
}
for _, v := range helper {
sort.Strings(v)
}
res = []string{}
backtracking("JFK")
return res
}
func backtracking(start string) {
for len(helper[start]) > 0 {
to := helper[start][0]
helper[start] = helper[start][1:]
backtracking(to)
}
res = append([]string{ start }, res...)
}