huaweiOD机试题跳房子ii
题的具体描述没看清楚,描述用例差不是这样
[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)returnfor 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 resultsif __name__ == '__main__':# ss=input()# target=int(input())# ss_new=ss[1:-1]# lists=list(map(int,ss_new.split(",")))#lists_new=sorted(lists)# res=fun(lists,target)lists=[1, 2, 3, 5, 4, 0, 4, 0, 9]lists_new = sorted(lists)res=fun(lists_new, 9)print(res)if res==[]:print(-1)else:ll=0index=-1for i in range(len(res)):if len((res[i]))>ll:ll=len((res[i]))index=irr=res[index]ree=[]for ele in lists:if ele in rr:ree.append(ele)rr.remove(ele)if rr==[]:breakprint(ree)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
