给定一组候选编号candidates(没有重复项)和特定值target,找到candidates
候选数总和为的所有唯一组合target
。candidates里面的数可以重复。
Input:candidates=[2,3,4,7] target=7
Output:[[2,2,3],[2,2,4],[7]]
Clue:运用迭代方法
1. 定义一个函数,里面包括i,path两个变量分别表示在candidates的数字位置和存储目前位置进行加和操作的数字。如果>target则终止迭代;如果=target则将path中存储的数字添加到最后用来输出结果的res列表中然后终止迭代。
res=[]
def krystal(i,path):
if sum(path)==target: res.append(path[:]) return
if sum(path)>target: return
2. 用for循环将candidates的数添加到path中,然后迭代将当前循环的位置当做krystal中的i,新的有数的path当做krystal的path,判断sum(path)是否>=target;最后将迭代完成要将path中的末尾数pop出去,用来防止[1,2],[2,1]操作两次这种情况。
for