216. Combination Sum III
Medium
Find all valid combinations of k
numbers that sum up to n
such that the following conditions are true:
- Only numbers
1
through9
are used. - Each number is used at most once.
Return a list of all possible valid combinations. The list must not contain the same combination twice, and the combinations may be returned in any order.
Example 1:
Input: k = 3, n = 7 Output: [[1,2,4]] Explanation: 1 + 2 + 4 = 7 There are no other valid combinations.
Example 2:
Input: k = 3, n = 9 Output: [[1,2,6],[1,3,5],[2,3,4]] Explanation: 1 + 2 + 6 = 9 1 + 3 + 5 = 9 2 + 3 + 4 = 9 There are no other valid combinations.
Example 3:
Input: k = 4, n = 1 Output: [] Explanation: There are no valid combinations. [1,2,1] is not valid because 1 is used twice.
Example 4:
Input: k = 3, n = 2 Output: [] Explanation: There are no valid combinations.
Example 5:
Input: k = 9, n = 45 Output: [[1,2,3,4,5,6,7,8,9]] Explanation: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45 There are no other valid combinations.
Constraints:
2 <= k <= 9
1 <= n <= 60
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class Solution { public: vector<vector<int>> combinationSum3(int k, int n) { vector<vector<int>> res; vector<int> cur; bt(k, n, res, cur, 1, 0); return res; } void bt(int k, int n, vector<vector<int>> &res, vector<int> cur, int pos, int sum){ if(sum==n && cur.size()==k){ res.push_back(cur); }else if(sum<n && pos<=9 && cur.size()<k){ for(int i=pos; i<=9; ++i){ if(sum+i>n) return; cur.push_back(i); bt(k, n, res, cur, i+1, sum+i); cur.pop_back(); } } } }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class Solution { List<List<Integer>> lists = new ArrayList<>(); public List<List<Integer>> combinationSum3(int k, int n) { helper(0, new ArrayList<>(), k, n, 1); return lists; } void helper(int sum, List<Integer> list, int k, int n, int p){ if(sum>=n){ if(sum==n && list.size()==k){ lists.add(list); } }else if(p<=9 && sum+p<=n && list.size()<k){ helper(sum, list, k, n, p+1); List<Integer> newList = new ArrayList<Integer>(list); newList.add(p); helper(sum+p, newList, k, n, p+1); } } } |
No comments:
Post a Comment