216. 组合总和 III
要求:找出所有相加之和为 n 的 k个数的组合,且满足下列条件:
- 只使用数字1到9
- 每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。
var combinationSum3 = function(k, n) {
let res = [], path = [], sum = 0
function backstracking(n, k, startIndex){
if(sum == n && path.length == k){
res.push([...path])
return
}
for(let i=startIndex; i<=9; i++){
sum += i
path.push(i)
backstracking(n, k, i+1)
sum -= i
path.pop()
}
}
backstracking(n, k, 1)
return res
};
17. 电话号码的字母组合
要求:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
var letterCombinations = function(digits) {
const map = ["", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"]
let path = [], res = []
function backstarcking(digits, index){
if(path.length == digits.length){
res.push(path.join(''))
return
}
let digit = digits[index] - '0'
let letters = map[digit]
for(let i=0; i<letters.length; i++){
path.push(letters[i])
backstarcking(digits, index+1)
path.pop()
}
}
if(digits.length == 0) return res
backstarcking(digits, 0)
return res
};