刷題第十三天
17. 電話號(hào)碼的字母組合:
回溯有點(diǎn)難,但根據(jù)模板思路走下來,似乎也還行,這題要先拿一個(gè)數(shù)組存各個(gè)數(shù)字對(duì)應(yīng)的字符。遞歸函數(shù)需要兩個(gè)參數(shù)一個(gè)是digits,一個(gè)是s,存當(dāng)前的字符結(jié)果。終止條件為當(dāng)digits為空時(shí),將s存進(jìn)結(jié)果集。獲取digits[0]處的電話字母組合,設(shè)為str,循環(huán)str,讓s+=c,遞歸減去下標(biāo)0的digits和s。遞歸結(jié)束讓s減掉最后一個(gè)字符,也就是前面的c。

39. 組合總和:
遞歸函數(shù)需要傳入candidates,target,當(dāng)前的sum,還有開始下標(biāo)s。終止條件為sum==target時(shí)。從s開始循環(huán)candidates。這里我事先排序了candidates,以便后續(xù)的剪枝,如果sum+candidates[i]大于target,則說明后續(xù)的candidates再怎么加都是比target大,直接break。將candidates[i]存進(jìn)path,遞歸sum+candidates[i]和i,pop。

40. 組合總和 II:
這題和39基本相似,區(qū)別在于candidates里有重復(fù)的數(shù),candidates里的數(shù)每次只能用一次,需要額外注意設(shè)置一個(gè)map存已經(jīng)遍歷過的數(shù),這樣就可以避免重復(fù)。

131. 分割回文串:
這題的關(guān)鍵在于循環(huán)切割點(diǎn)。如果當(dāng)前切割點(diǎn)大于s的長(zhǎng)度,說明是一個(gè)結(jié)果。
