39.组合总和
不知道说啥,但总得写点什么吧
class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
self.ans = []
self.backward(candidates, target, [])
return self.ans
def backward(self, candidates, target, pre):
if target == 0:
self.ans.append(pre[:])
return
for i in range(len(candidates)):
if target - candidates[i] >= 0:
pre.append(candidates[i])
self.backward(candidates[i:], target-candidates[i], pre)
pre.pop()
return
40.组合总和II
和上一题相比排序去重一下就行
class Solution:
def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
if not candidates:
return []
self.ans = []
candidates.sort()
print(candidates)
self.backward(candidates, target, [])
return self.ans
def backward(self, candidates, target, pre):
if target == 0:
self.ans.append(pre[:])
return
for i in range(len(candidates)):
if i > 0 and candidates[i] == candidates[i-1]:
continue
if target - candidates[i] >= 0:
pre.append(candidates[i])
self.backward(candidates[i+1:], target-candidates[i], pre)
pre.pop()
return
131.分割回文串
秒了写啥
class Solution:
def partition(self, s: str) -> List[List[str]]:
self.ans = []
self.backward(s, [])
return self.ans
def backward(self, string, temp):
if not string:
self.ans.append(temp[:])
return
for i in range(len(string)):
if self.ispalindrome(string[:i+1]):
temp.append(string[:i+1])
self.backward(string[i+1:], temp)
temp.pop()
def ispalindrome(self, string):
for i in range(len(string)//2):
if string[i] != string[-i-1]:
return False
return True