17. 电话号码的字母组合
地址: https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
题目:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
从题目上看,其实就是穷举法,问题是 你不知道会输入几个数字,因为需要嵌套几个for 没有办法决定。
所以需要使用 递归的方式来处理。
不过看到了另外一个处理方式,就是 先算出总共需要循环的次数,比如输入3个数字 就是333=27次。
算出总的循环次数,然后再单层循环来得到答案。
Scala:
object Solution {
def letterCombinations2( a1:List[String] , a2:List[String] ): List[String] = {
var tmp_a = List[String]()
for ( i <- a1 ){
for ( j <- a2 ){
tmp_a = (i+j) +: tmp_a
}
}
return tmp_a
}
def letterCombinations(digits: String): List[String] = {
val dic=Map("2"->List("a","b","c"),"3"->List("d","e","f"),"4"->List("g","h","i"),"5"->List("j","k","l"),"6"->List("m","n","o"),"7"->List("p","q","r","s"),"8"->List("t","u","v"),"9"->List("w","x","y","z"))
if (digits == ""){
return List[String]()
}
if (digits.length()==1){
return dic(digits)
}
var index=1
var tmp1=dic(digits(0).toString)
var tmp2=dic(digits(1).toString)
var result=letterCombinations2(tmp1,tmp2)
while (index<(digits.length)-1){
index=index+1
result=letterCombinations2(result,dic(digits(index).toString))
}
return result
}
}