- class Solution:
- def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
- res=[]
- path=[]
- def f(index):
- if sum(path)==target:
- res.append(path[:])
- return
- elif sum(path)>target:
- return
- for i in range(index,len(candidates)):
- path.append(candidates[i])
- f(i)
- path.pop()
- f(0)
- return res
和其他题差异点在13行,因为可以重复选择元素所以不写f(i+1)
- class Solution:
- def generateParenthesis(self, n: int) -> List[str]:
- res=[]
- path=[]
- def f(l,r):
- if len(path)==n*2:
- res.append(''.join(path))
- return
- if l<n:
- path.append("(")
- f(l+1,r)
- path.pop()
- if r<l:
- path.append(")")
- f(l,r+1)
- path.pop()
- f(0,0)
- return res
没有for循环的回溯
需要分左右两种情况
需要在任何位置右括号数量大于左括号(隐含条件if r>l:return)