題目闡述:
廣度搜索問題。 計算出全部可能的狀況。 銜接點在於segs的先後連貫,拼成全部的知足條件的segs 先後兩個seg要連續。 遞歸問題,要記得設置終止退出條件 elems = {len(s): ['']} 設置成dict形式,就不須要過程當中copy了,直接在此進行疊加累計
應用:將一個連續序列分紅全部元素可能的組合狀況。能夠用list進行組裝,也能夠用dict形式進行組裝。
重點:==> if i not in elems: 明確沒必要要的地方,能夠不用去進行計算。
class Solution: def wordBreak(self, s, wordDict): elems = {len(s): ['']} wordDict = set(wordDict) len_dict = set(len(w) for w in wordDict) def sentences(i): if i not in elems: iters=list() for len_iter in len_dict: cur_part=s[i:i+len_iter] if cur_part and cur_part in wordDict: # print('cur_part==>',cur_part) # elems_iter=list() elem_cur=cur_part for item in sentences(i+len_iter): # print('elem_cur==>',elem_cur) iterow= elem_cur + (item and ' '+item) # print('iter==>',iterow) iters.append(iterow) # print('iters==>',iters) elems[i]=iters return elems[i] result=sentences(0) # print(elems) return result