一、题目
给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
image示例:
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
二、解题
现将数字和字母的映射关系存入字典,然后遍历digits中的数字,找到对应的字母后与之前存在的result数组中的字符一一组合,直到组合到最后一个数字对应的字母。
时间复杂度为O(n^2), n为digits字符串的长度。(第二个循环le,因为le.count为3或4,不随n的变化而变化,所以不计算到时间复杂度内)
三、代码实现
class Solution {
func letterCombinations(_ digits: String) -> [String] {
if digits.count == 0 {
return []
}
var result: [String] = []
let letter = ["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"]]
for a in digits {
let le = letter[String(a)]!
if result.count == 0 {
result = le
continue
}
let res = result
result = []
for l in le {
for r in res {
result.append(r+l)
}
}
}
return result
}
}
Demo地址:github
网友评论