美文网首页每日刷题
lc 17 电话号码的字母组合

lc 17 电话号码的字母组合

作者: Suria007 | 来源:发表于2023-06-11 22:11 被阅读0次

c++ 解答版本

class Solution {
public:
    vector<string> letterCombinations(string digits) {
        map<char,vector<char>> k = {
            {'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'}}
        };
        vector<string> res;
        if (digits==""){
            return res;
        }
        res = {""};
        for (char x:digits){
            vector<string> temp;
            for (string z:res){
                for (char y:k[x]){
                    temp.push_back(z+y);
                }
            }
            res = temp;
        }
        return res;
    }
};

注意点:

  1. map 构造,{{key,value},{key,value}}
  2. string 类型 + char 类型 可行

go 解答版本

func letterCombinations(digits string) []string {
    k := map[byte][]byte{
        '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 := []string{""}
    if digits==""{
        return []string{}
    }
    for _,v := range digits{
        var temp []string
        for _,pre := range res{
            for _,cur := range k[byte(v)]{
                temp=append(temp,pre+string(cur))
            }
        }
        res = temp
    }
    return res
}

注意点:

  1. 两种初始化方式,var temp []stringres := []string{""}

  2. 类型转换,'' 单引号代表 byte,golang 中没有 char 类型,它的字符类型被称为 rune 类型。rune 类型是一种整数类型,而不是 ASCII 码或 Unicode 字符的字符类型,它可以存储单个字符,并使用 UTF-8 编码进行表示。因此,在 Go 代码中,通常使用 byte 或 rune 来处理单个字符。其中,byte 类型最适合处理 ASCII 码字符,而 rune 类型则更适用于字符串和 Unicode 字符。如果需要将字符转换为字符串,则可以使用 string() 函数将 rune 转换为字符串。

rune 与 byte 的区别以及如何选择:

byte 和 rune 都是基本数据类型,它们的主要区别在于所表示的数据范围相应的长度

一般而言,byte 类型用来表示字节值,取值范围为 0~255,长度为1个字节;而 rune 类型用来表示一个 Unicode 码点(Unicode Code Point),即可以表示任何一个 Unicode 字符,取值范围为 0 到 0x10FFFF,长度为 4 个字节。而且,byte 类型相当于 uint8 类型的别名,而 rune 类型相当于 int32 类型的别名。

在字符串操作方面,Go 语言中 string 类型底层实际上是以 byte 序列的结构存储的,并且支持使用索引访问其中的字节。因此,如果要直接处理 ASCII 编码的字符或者二进制数据,则可以使用 byte 类型;而如果需要处理 Unicode 编码的字符,则应该使用 rune 类型

相关文章

网友评论

    本文标题:lc 17 电话号码的字母组合

    本文链接:https://www.haomeiwen.com/subject/jnjfydtx.html