Skip to content

Commit d61328e

Browse files
committed
🟡 Solve problem 17
1 parent 4a11644 commit d61328e

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

‎swift/17.swift‎

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
class Solution {
2+
let dict: [Character: [String]] = [
3+
"2": ["a", "b", "c"],
4+
"3": ["d", "e", "f"],
5+
"4": ["g", "h", "i"],
6+
"5": ["j", "k", "l"],
7+
"6": ["m", "n", "o"],
8+
"7": ["p", "q", "r", "s"],
9+
"8": ["t", "u", "v"],
10+
"9": ["w", "x", "y", "z"]
11+
]
12+
13+
func letterCombinations(_ digits: String) -> [String] {
14+
guard digits.count > 0 else {
15+
return []
16+
}
17+
18+
let letters = getLetters(digits)
19+
return generateCombinations(letters)
20+
}
21+
22+
private func getLetters(_ digits: String) -> [[String]] {
23+
var letters: [[String]] = []
24+
for digit in digits {
25+
if let letter = dict[digit] {
26+
letters.append(letter)
27+
}
28+
}
29+
return letters
30+
}
31+
32+
private func generateCombinations(_ letters: [[String]]) -> [String] {
33+
var result: [String] = [""]
34+
for letterGroup in letters {
35+
var newResult: [String] = []
36+
for combination in result {
37+
for letter in letterGroup {
38+
newResult.append(combination + letter)
39+
}
40+
}
41+
result = newResult
42+
}
43+
return result
44+
}
45+
}
46+
47+
let solution = Solution()
48+
print(solution.letterCombinations("23")) // ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]

0 commit comments

Comments
 (0)