017-电话号码的字母组合

Description

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

Example
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
Solution
var (
    padMaps = map[int][]int{
        '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'},
    }
)


func letterCombinations(digits string) []string {
    if len(digits) == 0 {
        return nil
    }
    var list [][]int
    for i := range digits{
        if value,ok := padMaps[int(digits[i])];ok  {
            list = append(list, value)
        }
    }
    var results []string
    for i := 0 ;i < len(list);i ++ {
        results = combinations(results,list[i])
    }
    return results
}
//字符串组合
func combinations(left []string,right []int)[]string  {
    if len(right) == 0 {
        return left
    }
    var result  []string
    if len(left) == 0 {
        for i := range right {
            result = append(result, string(right[i]))
        }
    }else {
        for i := range left{
            for j := range right {
                result = append(result, left[i]+string(right[j]))
            }
        }
    }
    return result
}

leetCode地址