/ Given the phone dial pad attached below. Write a function that takes in a string of entered numbers // and returns all possible corresponding text possibly meaning to enter as a list of strings.

// Example: Input “123” // Output: [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]

fun phoneNumberDial(numbers: String): List<String> {
    val phonePad = getPhonePadHashMap()
    var listOfCombinations = mutableListOf<String>()
    var lastCombinations = mutableListOf<String>()
    var currentPrimaryCombinationLetter = ""
    //base case length is 1
    if (numbers.length == 1) {
        return phonePad[numbers[0].toString()]!!
    }
    // length > 1
    for (character in phonePad[numbers[0].toString()]!!) { // check the character list of number 2 -> ["23"]
        currentPrimaryCombinationLetter += character // Add the first character in the list of number 2 -> A
        lastCombinations = phoneNumberDial(
            numbers.substring(
                1, numbers.length
            )
        ).toMutableList() // get the next number in the string
        for (character in lastCombinations) {
            listOfCombinations.add(currentPrimaryCombinationLetter + character)
        }
        lastCombinations.clear()
        currentPrimaryCombinationLetter = ""
    }
    return listOfCombinations
}
 
private fun getPhonePadHashMap(): HashMap<String, List<String>> = HashMap<String, List<String>>().apply {
    this.mapKeys {
        "0" to listOf("")
        "1" to listOf("")
        "2" to listOf("A", "B", "C")
        "3" to listOf("D", "E", "F")
        "4" to listOf("G", "H", "I")
        "5" to listOf("J", "K", "L")
        "6" to listOf("M", "N", "O")
        "7" to listOf("P", "Q", "R", "S")
        "8" to listOf("T", "U", "V")
        "9" to listOf("W", "Y", "X", "Z")
    }
}