Combination Sum II

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.

Example 1:

Input: candidates = [10,1,2,7,6,1,5], target = 8

Output: [ [1,1,6], [1,2,5], [1,7], [2,6] ]

Example 2:

Input: candidates = [2,5,2,1,2], target = 5

Output: [ [1,2,2], [5] ]

Constraints:

  • 1 <= candidates.length <= 100
  • 1 <= candidates[i] <= 50
  • 1 <= target <= 30

Solution

The logics for the template are:

  • start_index: the start index of the next potential candidate in candidates.
  • is_leaf: if remaining == 0 we have reached our target using elements in path.
  • get_edges: all candidates in candidates[start_index:].
  • is_valid: candidate[i] is valid if it does not exceed remaining and is not a duplicate.

We will follow the same steps as in Deduplication to validate and avoid a duplicate candidate.

Implementation

1def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
2    def dfs(start_index, path, remaining):
3        if remaining == 0:
4            ans.append(path[:])
5        for i in range(start_index, len(candidates)):
6            if remaining - candidates[i] < 0:   # avoid results exceeding target
7                break
8            elif i != start_index and candidates[i] == candidates[i-1]: # avoid duplicates
9                continue
10            path.append(candidates[i])
11            dfs(i+1, path, remaining - candidates[i])
12            path.pop()
13    candidates.sort()
14    ans = []
15    dfs(0, [], target)
16    return ans

Not Sure What to Study? Take the 2-min Quiz to Find Your Missing Piece:

What's the relationship between a tree and a graph?

Discover Your Strengths and Weaknesses: Take Our 2-Minute Quiz to Tailor Your Study Plan:

Consider the classic dynamic programming of longest increasing subsequence:

Find the length of the longest subsequence of a given sequence such that all elements of the subsequence are sorted in increasing order.

For example, the length of LIS for [50, 3, 10, 7, 40, 80] is 4 and LIS is [3, 7, 40, 80].

What is the recurrence relation?

Solution Implementation

Not Sure What to Study? Take the 2-min Quiz:

The three-steps of Depth First Search are:

  1. Identify states;
  2. Draw the state-space tree;
  3. DFS on the state-space tree.
Fast Track Your Learning with Our Quick Skills Quiz:

Which algorithm should you use to find a node that is close to the root of the tree?


Recommended Readings


Got a question? Ask the Teaching Assistant anything you don't understand.

Still not clear? Ask in the Forum,  Discord or Submit the part you don't understand to our editors.


TA 👨‍🏫