@@ -4,37 +4,33 @@ package g0001_0100.s0017_letter_combinations_of_a_phone_number
4
4
5
5
class Solution {
6
6
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
14
13
}
15
14
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
24
25
}
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
+ }
38
34
}
39
35
}
40
36
}
0 commit comments