题解 | #加起来和为目标值的组合(二),递归+回溯+剪枝#

加起来和为目标值的组合(二)

http://www.nowcoder.com/practice/75e6cd5b85ab41c6a7c43359a74e869a

import java.util.* ;
public class Solution {
    public ArrayList<ArrayList<Integer>> combinationSum2(int[] num, int target) {
        Arrays.sort(num) ;
        ArrayList<ArrayList<Integer>> res = new ArrayList<>() ;
        help(target , num , 0 , res , new ArrayList<Integer>()) ;
        return res ;
    }
    public void help(int target , int[] num , int idx , ArrayList<ArrayList<Integer>> res , ArrayList<Integer> tmp)  {        
        if(target == 0) {
            res.add(new ArrayList<Integer>(tmp)) ;
            return ;
        }
        for(int i = idx ; i < num.length ; i ++) {
            if(num[i] > target) return ;//剪枝
            if((i > idx && num[i] == num[i-1])) continue ;//去重
            tmp.add(num[i]) ;
            help(target-num[i] , num , i + 1 , res , tmp) ;//递归
            tmp.remove(tmp.size() - 1) ;//回溯
        } 
    }  
}

一个菜鸟的算法刷题记录 文章被收录于专栏

分享一个菜鸟的成长记录

全部评论

相关推荐

牛客383479252号:9,2学生暑期实习失利开始投小厂,给这群人整自信了
点赞 评论 收藏
分享
吴offer选手:HR:我KPI到手了就行,合不合适关我什么事
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务