题目1: 第77题. 组合
讲解
leetcode
class Solution {
var result = [[Int]]()
var path = [Int]()
func combine(_ n: Int, _ k: Int) -> [[Int]] {
combineBacktrack(n, k, 1)
return result
}
func combineBacktrack(_ n: Int, _ k: Int, _ startIndex: Int) {
if k == path.count {
return result.append(path)
}
let end = n - (k - path.count) + 1
if startIndex > end { return }
for i in startIndex...end {
path.append(i)
combineBacktrack(n, k, i + 1)
path.removeLast()
}
}
}
题目2:216.组合总和III
讲解
leetcode
class Solution {
var set = [Int]()
var result = [[Int]]()
func combinationSum3(_ k: Int, _ n: Int) -> [[Int]] {
backtrack(k, n, 1)
return result
}
func backtrack(_ k: Int, _ n: Int, _ start: Int) {
var sum = 0
for i in set { sum += i }
if set.count == k {
if sum == n {
result.append(set)
}
return
}
let end = 9 - (k - set.count) + 1
if start > end || sum > n { return }
for i in start...end {
set.append(i)
backtrack(k, n, i + 1)
set.removeLast()
}
}
}
题目3: 17.电话号码的字母组合
讲解
leetcode
class Solution {
let map = [2: ["a","b","c"], 3: ["d","e","f"], 4: ["g","h","i"], 5: ["j", "k", "l"], 6: ["m", "n", "o"], 7: ["p", "q", "r", "s"], 8: ["t", "u", "v"], 9: ["w", "x", "y", "z"]]
var result = [String]()
var path = [String]()
func letterCombinations(_ digits: String) -> [String] {
if digits.isEmpty { return [] }
recursive(Array(digits), 0)
return result
}
func recursive(_ set: [Character], _ index: Int) {
if path.count == set.count {
result.append(path.joined())
return
}
let num = Int(String(set[index])) ?? 0
let chars = map[num] ?? []
print("\(chars) \(index)")
for i in 0..<chars.count {
path.append(chars[i])
recursive(set, index + 1)
path.removeLast()
}
}
}