解法
深度优先遍历,然后就是list的放值和移除值,为了下一次的for循环是相同的现场
代码
39
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public List<List<Integer>> combinationSum(int[] candidates, int target) {
Arrays.sort(candidates);
List<List<Integer>> res=new ArrayList<>();
f(candidates,target,0,new ArrayList<>(),res);
return res;
}
public void f(int[] arr,int target,int index,List<Integer> temp,List<List<Integer>> res)
{
if(target==0)
{
res.add(new ArrayList<>(temp));
return ;
}else if(target<0)
{
return ;
}
for(int i=index;i<arr.length;i++)
{
if(target-arr[i]<0) return ;
temp.add(arr[i]);
f(arr,target-arr[i],i,temp,res);
temp.remove(temp.size()-1);
}
}
}40
import java.util.*;
class Solution {
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
Arrays.sort(candidates);
List<List<Integer>> res=new ArrayList<>();
f(candidates,target,0,new ArrayList<>(),res);
return res;
}
public void f(int[] arr,int target,int index,List<Integer> temp,List<List<Integer>> res)
{
if(target==0)
{
res.add(new ArrayList<>(temp));
//System.out.println(temp);
return ;
}
else if(target<0)
{
return ;
}
for(int i=index;i<arr.length;i++)
{
if(target-arr[i]<0) return ;
if (i > index && arr[i] == arr[i - 1]) {
continue;
}
temp.add(arr[i]);
f(arr,target-arr[i],i+1,temp,res);
temp.remove(temp.size()-1);
}
}
}216
import java.util.ArrayList;
import java.util.List;
class Solution {
public List<List<Integer>> combinationSum3(int k, int n) {
List<List<Integer>> res = new ArrayList<>();
f(1,n,k,new ArrayList<>(),res);
return res;
}
public void f(int index,int n,int k, List<Integer> temp,List<List<Integer>> res) {
if(k==0&&n==0)
{
res.add(new ArrayList<>(temp));
return ;
}
else if(k==0)
{
return ;
}
for(int i=index;i<10;i++)
{
if(n-i<0) return ;
temp.add(i);
f(i+1,n-i,k-1,temp,res);
temp.remove(temp.size()-1);
}
}
/*
public List<List<Integer>> combinationSum3(int k, int n) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
for(int i=1;i<10;i++)
{
f(i,i,n,1,k,res,temp);
}
return res;
}
public void f(int curnum, int sum, int n, int count, int k,List<List<Integer>> res, List<Integer> temp) {
temp.add(curnum);
if(count==k)
{
if(sum==n){
res.add(new ArrayList<>(temp));
}
}else{
for(int i=curnum+1;i<10;i++)
{
sum+=i;
f(i,sum,n,count+1,k,res,temp);
sum-=i;
}
}
temp.remove(temp.size()-1);
return ;
}*/
}
京公网安备 11010502036488号