Skip to content

Commit a4dd5bd

Browse files
authored
Improved task 17.
1 parent 44604d4 commit a4dd5bd

File tree

1 file changed

+24
-28
lines changed
  • src/main/kotlin/g0001_0100/s0017_letter_combinations_of_a_phone_number

1 file changed

+24
-28
lines changed

src/main/kotlin/g0001_0100/s0017_letter_combinations_of_a_phone_number/Solution.kt

Lines changed: 24 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,33 @@ package g0001_0100.s0017_letter_combinations_of_a_phone_number
44

55
class Solution {
66
fun letterCombinations(digits: String): List<String> {
7-
if (digits.isEmpty()) {
8-
return emptyList()
9-
}
10-
val words: MutableList<String> = ArrayList()
11-
val word = CharArray(digits.length)
12-
helper(digits, word, 0, words)
13-
return words
7+
if (digits.isEmpty()) return ArrayList()
8+
val letters = arrayOf("", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz")
9+
val ans: MutableList<String> = ArrayList()
10+
val sb = StringBuilder()
11+
findCombinations(0, digits, letters, sb, ans)
12+
return ans
1413
}
1514

16-
private fun helper(digits: String, word: CharArray, cur: Int, words: MutableList<String>) {
17-
if (cur == digits.length) {
18-
words.add(String(word))
19-
} else {
20-
for (ch in charsForDigit(digits[cur])) {
21-
word[cur] = ch
22-
helper(digits, word, cur + 1, words)
23-
}
15+
private fun findCombinations(
16+
start: Int,
17+
nums: String,
18+
letters: Array<String>,
19+
curr: StringBuilder,
20+
ans: MutableList<String>
21+
) {
22+
if (curr.length == nums.length) {
23+
ans.add(curr.toString())
24+
return
2425
}
25-
}
26-
27-
private fun charsForDigit(digit: Char): CharArray {
28-
return when (digit) {
29-
'2' -> charArrayOf('a', 'b', 'c')
30-
'3' -> charArrayOf('d', 'e', 'f')
31-
'4' -> charArrayOf('g', 'h', 'i')
32-
'5' -> charArrayOf('j', 'k', 'l')
33-
'6' -> charArrayOf('m', 'n', 'o')
34-
'7' -> charArrayOf('p', 'q', 'r', 's')
35-
'8' -> charArrayOf('t', 'u', 'v')
36-
'9' -> charArrayOf('w', 'x', 'y', 'z')
37-
else -> charArrayOf()
26+
for (i in start until nums.length) {
27+
val n = Character.getNumericValue(nums[i])
28+
for (j in 0 until letters[n].length) {
29+
val ch = letters[n][j]
30+
curr.append(ch)
31+
findCombinations(i + 1, nums, letters, curr, ans)
32+
curr.deleteCharAt(curr.length - 1)
33+
}
3834
}
3935
}
4036
}

0 commit comments

Comments
 (0)