【Swift】LeedCode 电话号码的字母组合
由于各大平台的算法题的解法很少有Swift的版本,小编这边将会出个专辑为手撕LeetCode算法题。新手撕算法。请包涵!!!

请添加图片描述

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。


示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
提示:
0 <= digits.length <= 4
digits[i] 是范围 ['2', '9'] 的一个数字

class Solution {
    func letterCombinations(_ digits: String) -> [String] {
        //0-9
        var dataArray = ["","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]
        var array:[String] = []
        var arr:[String] = []
        //如果输入空字符串的话
        if digits == ""{
            return []
        }
        //把输入的数字提取出对应的字母
        for digit in digits{
            let index = stringToInt(str:String(digit))
            array.append(dataArray[index])
        }
        if array.count == 1{
            for item in array[0]{ //如果只输入了一个数的话
                print(item)
                arr.append(String(item))
            }
        }else if array.count == 2{ //如果输入了两个数的话
            for index in 0..<array.count-1{
                for item in array[index]{
                    for item2 in array[index+1]{
                        print("\(item),\(item2)")
                        var str = String("\(item)\(item2)")
                        arr.append(str)
                    }
                }
            }
        }else if array.count == 3{ //如果输入三个数的话
            for index in 0..<array.count-2{
                for item in array[index]{
                    for item2 in array[index+1]{
                        for item3 in array[index+2]{
                            print("\(item),\(item2)")
                            var str = String("\(item)\(item2)\(item3)")
                            arr.append(str)
                        }
                    }
                }
            }
        }else if array.count == 4{ //如果输入四个数的话
            for index in 0..<array.count-3{
                for item in array[index]{
                    for item2 in array[index+1]{
                        for item3 in array[index+2]{
                            for item4 in array[index+3]{
                            print("\(item),\(item2)")
                            var str = String("\(item)\(item2)\(item3)\(item4)")
                            arr.append(str)
                            }
                        }
                    }
                }
            }
        }
        return arr
    }
    //字符串转Int类型
    func stringToInt(str:String) -> Int{
        if str == "1"{
            return 1
        }else if str == "2"{
            return 2
        }else if str == "3"{
            return 3
        }else if str == "4"{
            return 4
        }else if str == "5"{
            return 5
        }else if str == "6"{
            return 6
        }else if str == "5"{
            return 5
        }else if str == "7"{
            return 7
        }else if str == "8"{
            return 8
        }else if str == "9"{
            return 9
        }else{
            return 0
        }
    }
    
}
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐