39. Combination Sum
Problem
Given a set of candidate numbers (candidates) (without duplicates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target.
The same repeated number may be chosen from candidates unlimited number of times.
Note:
All numbers (including
target) will be positive integers.The solution set must not contain duplicate combinations.
Example 1:
Input: candidates = [2,3,6,7], target = 7,
A solution set is:
[
[7],
[2,2,3]
]Example 2:
Input: candidates = [2,3,5], target = 8,
A solution set is:
[
[2,2,2,2],
[2,3,3],
[3,5]
]Related Topics:
Array Backtracking
Analysis
深度优先搜索,回溯。
Code
class Solution {
fun combinationSum(candidates: IntArray, target: Int): List<List<Int>> {
candidates.sort()
val result = mutableListOf<List<Int>>()
backtrack(candidates, result, intArrayOf(), target, 0)
return result
}
private fun backtrack(candidates: IntArray, result: MutableList<List<Int>>, tempArray: IntArray, target: Int, index: Int) {
when {
target == 0 -> {
result.add(tempArray.toList())
}
target > 0 -> {
(index until candidates.size).forEach {
backtrack(candidates, result, tempArray + candidates[it], target - candidates[it], it)
}
}
}
}
}Last updated