美文网首页LeetCode题库-Swift解题
17. 电话号码的字母组合(Swift版)

17. 电话号码的字母组合(Swift版)

作者: Mage | 来源:发表于2018-12-26 16:35 被阅读12次

    一、题目

    给定一个仅包含数字 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

    相关文章

      网友评论

        本文标题:17. 电话号码的字母组合(Swift版)

        本文链接:https://www.haomeiwen.com/subject/lxndkqtx.html