Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.
Ensure that numbers within the set are sorted in ascending order.
Example 1:
Input: k = 3, n = 7
Output:
[[1,2,4]]
Example 2:
Input: k = 3, n = 9
Output:
[[1,2,6], [1,3,5], [2,3,4]]
[code]
public class Solution {
public List<List<Integer>> combinationSum3(int k, int n) {
if(n==0 || k==0)return new ArrayList<List<Integer>>();
return nsum(1,9,k,n);
}
List<List<Integer>> nsum(int start, int end, int n, int k)
{
List<List<Integer>> list=new ArrayList<List<Integer>>();
if(k<=0)return list;
if(n==1)
{
if(start<=k && end>=k)
{
ArrayList<Integer> temp=new ArrayList<Integer>();
temp.add(k);
list.add(temp);
}
}
else
{
for(int i=start+1;i+n-2<=end;i++)
{
List<List<Integer>> sub=nsum(i,end,n-1,k-i+1);
for(List<Integer> l: sub)
{
l.add(0,i-1);
list.add(new ArrayList<Integer>(l));
}
}
}
return list;
}
}