1. 程式人生 > 實用技巧 >力扣題:LCP 07. 傳遞資訊

力扣題:LCP 07. 傳遞資訊

https://leetcode-cn.com/problems/chuan-di-xin-xi/

反向回溯

1、反向回溯,可以節省時間,進行到哪一步沒有連線可以直接結束返回0
2、建立字典dic,遍歷relation,將每個點的值作為key,將能夠連線到某個點的所有點組成列表作為value
3、回溯開始,初始值即為old = [n-1], 回溯有可能連線到這個點的所有點作為列表new
4、如果再某一次回溯時即old為空,則說明根本無法到達現在的點,直接輸出0
5、如果old不為空,則遍歷old中每一個元素為key,將字典中的value全部加入new,下一次回溯再把new賦值給old
6、遍歷結束,只要輸出最終的new列表中0的個數即可

`class Solution:
def numWays(self, n: int, relation: List[List[int]], k: int) -> int:

    dic = {}
    for L in relation:
        if L[1] in dic:
            dic[L[1]].append(L[0])
        else:
            dic[L[1]] = [L[0]]
    old = [n-1]
    for i in range(k):
        new = []
        if not old:
            return 0
        else:
            for j in old:
                if j in dic:
                    new += dic[j]
                old = new
    else:
        return new.count(0)

`