前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2021-09-16:给定一个仅包含数字 2-9 的字符串,返回所有

2021-09-16:给定一个仅包含数字 2-9 的字符串,返回所有

原创
作者头像
福大大架构师每日一题
修改2021-09-17 16:53:28
1.3K0
修改2021-09-17 16:53:28
举报

2021-09-16:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。按键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'。示例 1:输入:digits = "23",输出:"ad","ae","af","bd","be","bf","cd","ce","cf"。示例 2:输入:digits = "",输出:[]。示例 3:输入:digits = "2",输出:"a","b","c"。

福大大 答案2021-09-16:

自然智慧。递归。

代码用golang编写。代码如下:

代码语言:txt
复制
package main

import "fmt"

func main() {
    digits := "23"
    ret := letterCombinations(digits)
    fmt.Println(ret)
}

var phone = [][]byte{
    {'a', 'b', 'c'},      // 2    0
    {'d', 'e', 'f'},      // 3    1
    {'g', 'h', 'i'},      // 4    2
    {'j', 'k', 'l'},      // 5    3
    {'m', 'n', 'o'},      // 6
    {'p', 'q', 'r', 's'}, // 7
    {'t', 'u', 'v'},      // 8
    {'w', 'x', 'y', 'z'}, // 9
}

// "23"
func letterCombinations(digits string) []string {
    ans := make([]string, 0)
    if len(digits) == 0 {
        return ans
    }
    str := []byte(digits)
    path := make([]byte, len(str))
    process(str, 0, &path, &ans)
    return ans
}

func process(str []byte, index int, path *[]byte, ans *[]string) {
    if index == len(str) {
        *ans = append(*ans, string(*path))
    } else {
        cands := phone[str[index]-'2']
        for _, cur := range cands {
            (*path)[index] = cur
            process(str, index+1, path, ans)
        }
    }
}

执行结果如下:

图片
图片

左神java代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档