提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
每日刷题,从己做起。
一、分割回文串
class Solution:
def partition(self, s: str) -> List[List[str]]:
result = []
self.backtracking(s, 0, [], result)
return result
def backtracking(self, s, startindex, path, result):
if startindex == len(s):
result.append(path[:])
return
for i in range(startindex, len(s)):
if self.is_palindarome(s, startindex, i):
path.append(s[startindex: i + 1])
self.backtracking(s, i+1, path, result)
path.pop()
def is_palindarome(self, s:str, start:int, end:int):
i: int = start
j: int = end
while i<j:
if s[i] != s[j]:
return False
i += 1
j -= 1
return True
二、组合总和I
class Solution:
def backtracking(self, candidates, target, total, startindex, path, result):
if total > target:
return
if total == target:
result.append(path[:])
return
for i in range(startindex, len(candidates)):
total += candidates[i]
path.append(candidates[i])
self.backtracking(candidates, target, total, i, path, result)
total -= candidates[i]
path.pop()
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
result = []
self.backtracking(candidates, target, 0, 0, [], result)
return result
三、组合总和II
class Solution:
def backtracking(self, candidates, target, total, startindex, path, result):
if total == target:
result.append(path[:])
return
for i in range(startindex, len(candidates)):
if i > startindex and candidates[i] == candidates[i-1]:
continue
if total + candidates[i] > target:
break
total += candidates[i]
path.append(candidates[i])
self.backtracking(candidates, target, total, i + 1, path, result)
total -= candidates[i]
path.pop()
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
result = []
candidates.sort()
self.backtracking(candidates, target, 0, 0, [], result)
return result
总结
加油