17. 电话号码的字母组合

79 阅读1分钟

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

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

来源:力扣(LeetCode) 链接:leetcode.cn/problems/le… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
算法:
本地考察7,8,9号键的边界条件

func letterCombinations(digits string) []string {

    ans := make([]string, 0)

    var dfs func (digits, str string,i int)

    // distance := byte('a' - '2')

    dfs = func (digits, str string,i int){

        if i == len(digits) {

            if str != "" {

                ans = append(ans, str)

            } 

            return 

        }

        start := 'a' + (digits[i] - '2') * 3

        interval := byte(2)

        if digits[i] == '7' || digits[i] == '9' {

            interval = interval + byte(1)

        } 

        if digits[i] == '8' || digits[i] == '9' {

            start = start + byte(1)

        }

        for j := start; j <= start + interval  ; j ++ {

            dfs(digits, str + string(j), i + 1)

        }        

    }

    dfs(digits, "", 0)

    return ans

}

\