LeetCode算法题-17. 电话号码的字母组合(Swift)
2019-09-30 本文已影响0人
entre_los_dos
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
image.png
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
方法
func letterCombinations(_ digits: String) -> [String] {
let dic = [
"0":[],
"1":[],
"2": ["a","b","c"],
"3": ["d","e","f"],
"4": ["g","h","i"],
"5": ["j","k","l"],
"6": ["m","n","o"],
"7": ["p","q","r","s"],
"8": ["t","u","v"],
"9": ["w","x","y","z"]
]
var result = [String]() //存放结果的值
for character in digits {
let currentArray = dic[String(character)]!//当前对应的键盘上的单词
if result.count == 0 {
//如果此时结果里面还没值,将当前对应的单词数组加入结果
for chara in currentArray {
result.append(chara)
}
}else {
//1、如果结果有值,遍历结果,取出一个值后,将其拿出。
//2、遍历当前键盘对应的单词数组,将其拼在第一步拿出的字符串后面,并将这个拼在结果里面。
let currentResult = result
for i in 0..<currentResult.count {
result.remove(at: 0)
let resultStr = currentResult[i]
for chara in currentArray {
let lastChara = resultStr + chara
result.append(lastChara)
}
}
}
}
return result
}