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]]
题解:
题意是,从1-9这9个数中,选出k个不同的数,使之和等于指定的值n。使用递归的方法。
public class Solution {
public List<List<Integer>> combinationSum3(int k, int n)
{
List<List<Integer>> result = new ArrayList<List<Integer>>();
if(n<k || k == 0)
{
return result;
}
dfs(result, new ArrayList<Integer>(), k, n, 0, 1);
return result;
}
private void dfs(List<List<Integer>> result,List<Integer> path, int k, int n, int sum, int pos)
{
if(n == sum && path.size() == k)
{
result.add(new ArrayList<Integer>(path));
return;
}
for(int i = pos; i<=9; i++)
{
if(sum+i>n)
break;
path.add(i);
dfs(result, path, k, n, sum+i, i+1);
path.remove(path.size()-1);
}
}
}
参考:
https://leetcode.com/discuss/89126/java-1ms-solution-easy-understand