美文网首页
IOS 算法(中级篇) ----- 电话号码的字母组合

IOS 算法(中级篇) ----- 电话号码的字母组合

作者: ShawnAlex | 来源:发表于2022-02-11 15:23 被阅读0次

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

键盘图片

例子

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

输入:digits = ""
输出:[]

输入:digits = "2"
输出:["a","b","c"]

解题思路

题意不难理解, 拿 "", "2", "23" 举例, 其结果依次

  • []
  • ["a","b","c"]
  • ["ad","ae","af","bd","be","bf","cd","ce","cf"]
    可看出, 每增加1位数字, 只是在上一个结果上, 依次新增加新数字位的字母子位

代码

未翻译版
    func letterCombinations(_ digits: String) -> [String] {

        if digits.count == 0 { return [] }
        
        let dic = ["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 res = [""]
        
        for i in digits {
            
            let n:[String] = dic[String(i)]!
            var temp = [String]()
            
            for j in n {
                for z in res {
                    temp.append(z + j)
                }
            }
            
            res = temp
        }
        
        return res;

    }
翻译版
    func letterCombinations(_ digits: String) -> [String] {

        // 如果没有传入字母, 直接返回空数组即可
        if digits.count == 0 { return [] }
        
        // 定义字母字典, 放在方法外面也可
        let dic = ["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"]]
        
        // 定义结果res
        var res = [""]
        
        // 定义结果遍历传入字母
        for i in digits {
            
            // 找到数字位表示的字母数组
            let n:[String] = dic[String(i)]!

            // 定义容器数组
            var temp = [String]()
            
            // 找到数字位表示的字母数组二次循环
            for j in n {
               
                // 三次循环字母数组
                for z in res {
                    
                    // 在之前数组的每一位上增加新字母
                    temp.append(z + j)
                }
            }
            
            // 重置结果为新数组
            res = temp
        }
        
        // 返回结果
        return res;

    }

题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
IOS 算法合集地址

相关文章

网友评论

      本文标题:IOS 算法(中级篇) ----- 电话号码的字母组合

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