Grokking the Coding Interview: Patterns for Coding Questions
Vote

0% completed

Combination Sum (medium)

Problem Statement

Try it yourself

Problem Statement

Given an array of distinct positive integers candidates and a target integer target, return a list of all unique combinations of candidates where the chosen numbers sum to target. You may return the combinations in any order.

The same number may be chosen from candidates an unlimited number of times. Two combinations are unique if the frequency of at least one of the chosen numbers is different.

Example 1:

Input: candidates = [2, 3, 6, 7], target = 7  
Output: [[2, 2, 3], [7]]  
Explanation: The elements in these two combinations sum up to 7.

Example 2:

Input: candidates = [2, 4, 6, 8], target = 10  
Output: [[2,2,2,2,2], [2,2,2,4], [2,2,6], [2,4,4], [2,8], [4,6]]    
Explanation: The elements in these six combinations sum up to 10.

Constraints:

  • 1 <= candidates.length <= 30
  • 2 <= candidates[i] <= 40
  • All elements of candidates are distinct.
  • 1 <= target <= 40

About the output order. Build combinations by scanning the candidates in the given order, allowing repeats of the current candidate before moving right, the order the examples show: for [2,3,6,7] and target 7, the answer is [[2,2,3],[7]]. The judge compares your list against this exact order, so a correct set of combinations arranged differently, such as [[7],[2,2,3]], is currently marked wrong.

Try it yourself

Try solving this question here:

Python3
Python3

. . . .
F

focusssspro

· 4 months ago

You have test case:


[2,3,5]
0

But in constrains it is said: 1 <= target <= 40

Show 1 reply
M

makarand.h

· 2 years ago

It is not accepting correct results.

[[7], [2, 2, 3]] and [[2, 2, 3], [7]] both should be accepted but it doesn't.

Show 1 reply
Mohammed Dh Abbas

Mohammed Dh Abbas

· 2 years ago

class Solution: def combinationSum(self, candidates, target): def backtrack(result, index, path, add): if add > target: return if add == target: result.append(path[:]) for i in range(index, len(candidates)): path.append(candidates[i]) add += candidates[i] backtrack(result, i, path, add) add -= candidates[i] path.pop() result = [] backtrack(result, 0, [], 0) return result
Show 1 reply

Reading Progress

0%


Vote for new content

On This Page

Problem Statement

Try it yourself