个人理解: 为什么要去list中找target?其实target代表能与sum3相加得到sum/2的值,即判断list是否存在和或值为target的元素。假设存在满足条件的元素,则得:sum=sum3+sum5+c(c为list的元素和)和sum/2=sum3+a 由此可得sum/2=sum5+(c-a),即若能凑出a使得sum/2=sum3+a,则list剩余元素和+sum5必等于sum/2,所以target可以为sum/2-sum3或者sum/2-sum5。递归的理解: 核心在target-list.get(start)。在helper(list,target-list.get(start),start+1)中由于start+1,所以它会因为依次减去list中的元素,直到start == list.size()(即减完最后一个元素),而helper(list,target,start+1)则表示跳过第start个元素进入递归,即target不减第start个元素,所以每次递归都会出现减或者不减第start个元素的情况,因此递归终止时,完成了sum/2-sum3(即target)对list中元素所有可拼凑组合的减法。当start == list.size()递归终止时,如果 target==0,说明存在某种list元素的拼凑组合,使sum/2-sum3减去该组合的和刚好为0,能在list元素中凑出target。
点赞

相关推荐

不愿透露姓名的神秘牛友
06-13 19:30
化身华黑 今天询问对接人审批情况,结果被告知没HC了 云计算 
苦闷的柠檬精allin实习:主管面结束后hr每周保温一次,结果前几天和我说没hc了,我也化身华黑子了
投递华为等公司8个岗位 > 华为求职进展汇总
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务