题的具体描述没看清楚,描述用例差不是这样
[1,2,4,5,0] 第一行输入数组
9 第二行输入一个标记数
[4,5,0] 第三行输出一个子数组,使子数组的和为标记数,子数组是最长子数组。
Python代码实现,参考leetcode39组合总和实现。
def fun(lists, target): n = len(lists) results=[] # sum是当前的选择,track 是路径 def backtrack(sum,lists_new, track): # 路径结束,不满足约束条件 if sum > target : return # 路径结束,满足约束条件 if sum == target: results.append(track) return for j in range(len(lists_new)): # 更新选择列表和路径,递归 backtrack(sum + lists_new[j],lists_new[j+1:n+1], track + [lists_new[j]]) backtrack(0,lists,[]) return results if __name__ == '__main__': # ss=input() # target=int(input()) # ss_new=ss[1:-1] # lists=list(map(int,ss_new.split(","))) #lists_new=sorted(lists) # res&#