美文网首页
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