來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
給定一個(gè)僅包含數(shù)字 2-9 的字符串,返回所有它能表示的字母組合。
給出數(shù)字到字母的映射如下(與電話按鍵相同)。注意 1 不對應(yīng)任何字母。

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]() //存放結(jié)果的值
for character in digits {
let currentArray = dic[String(character)]!//當(dāng)前對應(yīng)的鍵盤上的單詞
if result.count == 0 {
//如果此時(shí)結(jié)果里面還沒值,將當(dāng)前對應(yīng)的單詞數(shù)組加入結(jié)果
for chara in currentArray {
result.append(chara)
}
}else {
//1、如果結(jié)果有值,遍歷結(jié)果,取出一個(gè)值后,將其拿出。
//2、遍歷當(dāng)前鍵盤對應(yīng)的單詞數(shù)組,將其拼在第一步拿出的字符串后面,并將這個(gè)拼在結(jié)果里面。
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
}