Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sum to target.
Each number in candidates may only be used once in the combination.
Note: The solution set must not contain duplicate combinations.
Given the root of a binary tree, flatten the tree into a “linked list”: The “linked list” should use the same TreeNode class where the right child pointer points to the next node in the list and the left child pointer is always null. The “linked list” should be in the same order as a pre-ordertraversal of the binary tree. Example 1:
Constraints: The number of nodes in the tree is in the range [0, 2000]. -100 <= Node.val <= 100Follow up: Can you flatten the tree in-place (with O(1) extra space)?
Find all valid combinations of k numbers that sum up to n such that the following conditions are true:
Only numbers 1 through 9 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. Using 4 different numbers in the range [1,9], the smallest sum we can get is 1+2+3+4 = 10 and since 10 > 1, there are no valid combination.
Constraints:
2 <= k <= 91 <= n <= 60
题目大意:
数字1-9的组合个数为k的组合和等于k,每个元素最多用一次
解题思路:
用组合模板,先排序
解题步骤:
N/A
注意事项:
Leetcode 40和77的结合。个数和target都要达到。用if k == 0 and target == 0
Python代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
defcombinationSum3(self, k: int, n: int) -> List[List[int]]: nums = [_ for _ inrange(1, 10)] res = [] self.dfs(nums, 0, k, n, [], res) return res
defdfs(self, nums, start, k, target, path, res): if k == 0and target == 0: res.append(list(path)) return if k == 0: return for i inrange(start, len(nums)): path.append(nums[i]) self.dfs(nums, i + 1, k - 1, target - nums[i], path, res) path.pop()