关于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(); //回溯(经典用法)
}
}
}