@@ -4,37 +4,33 @@ package g0001_0100.s0017_letter_combinations_of_a_phone_number
44
55class 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