面试前猎头提示我会考递归,妈的,现学真的搞不定啊,题目是 li = [2,3,5,7,9],输出任意组合,可以重复选,输出所有和是 13 的组合,递归现学现用失败,还是老老实实拿循环写的: li = [2,3,5,7,9]
def sum13(li): for i in li: if i == 13: print(i) for j in li: if i + j == 13: print(i,j) for k in li: if i + j + k== 13: print(i,j,k) for l in li: if i + j + k + l== 13: print(i,j,k,l) for o in li: if i + j + k + l + o == 13: print(i,j,k,l,o)
这个应该是回溯吧 def f(lst, target): ans = [] def dfs(val_index, index): if sum([lst[i] for i in val_index]) == target: ans.append([lst[i] for i in val_index]) return if sum([lst[i] for i in val_index]) > target: return for i in range(index, len(lst)): if i in val_index: continue dfs(val_index+[i], i+1) dfs([], 0) return ans
func findSum(candidates []int, target int) [][]int { var result [][]int var list []int var sum int for _,val :=range candidates{ if sum + val > target{ return result }else{ newList := append(list,val) if sum + val == target{ result = append(result, newList) }else{ findSum(newList, sum + val) } } } return result }