题目
给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] = [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 cityBi 。请你找出这次旅行的终点站,即没有任何可以通往其他城市的线路的城市。
题目数据保证线路图会形成一条不存在循环的线路,因此恰有一个旅行终点站。
示例 1:
输入:
paths = [["London","New York"],["New York","Lima"],["Lima","Sao Paulo"]]
输出:
"Sao Paulo"
解释:
从 "London" 出发,最后抵达终点站 "Sao Paulo" 。本次旅行的路线是 "London" -> "New York" -> "Lima" -> "Sao Paulo" 。
示例 2:
输入:
paths = [["B","C"],["D","B"],["C","A"]]
输出:
"A"
解释 :
所有可能的线路是:
"D" -> "B" -> "C" -> "A".
"B" -> "C" -> "A".
"C" -> "A".
"A".
显然,旅行终点站是 "A" 。
示例 3:
输入:
paths = [["A","Z"]]
输出:
"Z"
提示:
1 <= paths.length <= 100
paths[i].length == 2
1 <= cityAi.length, cityBi.length <= 10
cityAi != cityBi
所有字符串均由大小写英文字母和空格字符组成。
答案
我的方法
博主能力有限,用了非常笨的方法,就是遍历,无止境的遍历,直道找到一个准确的为止,耗费的资源特别多。堪称屎山代码。大家还是看看后面官方给的答案吧~~~~
python
list1=[paths[0]]
list2=[]
x = paths[0][1]
paths.pop(0)
a=1
for i,j in enumerate(paths):
if x == paths[i][0]:
x=paths[i][1]
list1.append(j)
else:
list2.append(j)
if len(paths)+1 == len(list1):
return x
else:
while 1:
for i,j in enumerate(list2):
if x == list2[i][0]:
x=list2[i][1]
list1.append(j)
if len(list1)==len(paths)+1:
return x
a+=1
if a>=len(list2):
return x
官方的方法
官方不愧是官方,这个方法让我汗颜,简简单单两句话就搞定了我十几句话的代码。而且速度也很快!!
思路与算法
根据终点站的定义,终点站不会出现在cityAi中,因为存在从cityAi出发的线路,所以终点站只会出现在cityBi中。据此,我们可以遍历cityBi,返回不在cityAi中的城市,即为答案。
代码实现时,可以先将所有cityAi存于一哈希表中,然后遍历cityBi并查询 cityBi是否在哈希表中。
python
class Solution(object):
def destCity(self, paths):
"""
:type paths: List[List[str]]
:rtype: str
"""
citiesA = {path[0] for path in paths}
return next(path[1] for path in paths if path[1] not in citiesA)
作者:力扣官方题解
链接在这里!
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。