题目一:
直接看代码:
var findItinerary = function(tickets) {
let result = ['JFK'] // 记录起始机场
let map = {} || new Map()
for (const ticket of tickets) { // 记录映射关系
const [from, to] = ticket // ES6 解构赋值
if (map[from] === undefined) {
map[from] = [] // 如果map中不存在当前起始机场,变将其value设置为空数组,以便以后添加映射机场
}
map[from].push(to) // 一个机场映射多个机场,key值为出发机场,其value为降落机场数组
}
for (const city in map) {
map[city].sort() // 对到达城市列表排序,对每个出发机场对应的降落机场数组进行排序
}
var backtracking = () => {
if (result.length === tickets.length + 1) {
return true
}
if (map[result[result.length - 1]] === undefined || map[result[result.length - 1]].length === 0) {
return false
}
for (let i = 0; i < map[result[result.length - 1]].length; i++) {
let city = map[result[result.length - 1]][i] // 获取获取当前出发机场对应的排序后的第一个降落机场
map[result[result.length - 1]].splice(i, 1) // 删除已走过航线,防止死循环
result.push(city)
if (backtracking()) {
return true
}
result.pop(city)
map[result[result.length - 1]].splice(i, 0, city) // 将删除的航线,重新添加进去,回溯
}
}
backtracking()
return result
};
总结
这道题主要学习一下如何使用map建立这样复杂的映射关系,逻辑更加清晰了。