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;
}
};
注意点:
- map 构造,{{key,value},{key,value}}
- 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
}
注意点:
-
两种初始化方式,
var temp []string
,res := []string{""}
-
类型转换,
''
单引号代表 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 类型。
网友评论