组合总和-java-递归-leetcode.77

关于java的算法题解 , 太少。当我用自己的方法写出这道题时 , 就想发布出来 , 给大家看一下我的写法与思路。 

class Solution {
 //设置全局变量 	
    List<List<Integer>> result = new ArrayList<>(); 	
    LinkedList<Integer> path = new LinkedList<>(); 
public List<List<Integer>> combinationSum(int[] candidates, int target) { 
    //调用递归函数 
    backTracking(candidates,target,0,0); 

    return result; 
} 
public void backTracking(int[] candidates, int target , int startLine , int sum){
        if(sum>target)		return;		    //当sum大于target时,跳出 
        if(sum==target){ 	 	            //当成立时,将path录入 
              result.add(new ArrayList<>(path)); 
              return; 
         } 

        for(int i = startLine ; i<candidates.length ; i++ ){
             path.add(candidates[i]);		    //把将要尝试的数记入路径中 
             sum+=candidates[i];			    //求当前,记入路径数的总和 
    
         //递归,切记循环时,填入i,以遍下次循环时,startLine的值为i, 
         //可以避免,复合情况的数组与之前的数组重叠(假如把i替换为startLine肯定就有重复项)                     
             backTracking(candidates,target,i,sum); 
    
             sum-=candidates[i];			    //减去 
             path.removeLast();			        //回溯(经典用法) 
        } 
    } 		
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值