当前位置: 首页 > 后端技术 > Java

LeetCode-039-combinedsum

时间:2023-04-02 01:13:27 Java

combinedsum题目描述:给定一个没有重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字之和为target的组合。候选人中的数字可以无限次重复选择。解释:所有数字(包括目标)都是正整数。解决方案集不能包含重复的组合。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:穷举法类似于构建多叉树。最大深度就是candidates数组的长度,然后得到所有可能的路径。最大路径是从根节点到叶节点。判断所有路径之和是否等于目标。如果相等,则加入到结果集中,最后需要判断权重,去掉重复的组合,最后返回。importjava.util.*;publicclassLeetCode_039{/***穷举方法**@paramcandidates*@paramtarget*@return*/publicstaticList>combinationSum(int[]candidates,inttarget){//结果集List>result=newArrayList<>();//所有可能的组合Queue>allPossibleCombinations=newLinkedList<>();//初始化所有情况for(intcandidate:candidates){ListonePossibleCombination=newArrayList<>();onePossibleCombination.add(候选人);allPossibleCombinations.add(onePossibleCombination);}while(!allPossibleCombinations.isEmpty()){Listtemp=allPossibleCombinations。轮询();整数总和=0;for(Integernum:temp){sum+=num;}如果(总和==目标){结果.添加(温度);}elseif(sumtoAdd=newArrayList<>(Arrays.asList(newInteger[temp.size()]));Collections.copy(toAdd,temp);toAdd.add(候选人);allPossibleCombinations.add(toAdd);}}}//去重后的结果List>result1=newArrayList<>();对于(inti=0;ione=result.get(i);集合排序(一);for(intj=i+1;jtwo=result.get(j);Collections.sort(二);如果(one.size()!=two.size()){继续;}布尔等于=真;对于(intx=0;xintegers:combinationSum(candidates,28)){for(Integerinteger:integers){System.out.打印(整数+“”);}System.out.println();}}}【每日留言】不要急于让生活给你所有的答案,有时候我们需要耐心等待,相信过程,从容向前,不辜负生活,生活也会不辜负你。