起因

今天我在刷LeetCode的每日一题,Go我实在不知道怎么写出来,我就看了一眼题解,发现题解解答方式很有意思。它创建了一个byte切片,然后将数字转换成string放进byte切片中.

我很好奇,为什么一个类型为string的值能append进byte切片中

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func getLucky(s string, k int) int {
//--------------------------------------------------------------------
t := make([]byte, 0, 10)
for _, c := range s{
t = append(t, strconv.Itoa(int(c - 'a' + 1))...)
}
//--------------------------------------------------------------------
digit := string(t)
for ; k > 0 && len(digit) > 1; k--{
num := 0
for _, c := range digit{
num += int(c - '0')
}
digit = strconv.Itoa(num)
}
ans, _ := strconv.Atoi(digit)
return ans
}

疑问

  1. 为什么在append的后面要添加...
  2. 为什么string可以被append进byte切片

解答

  1. strconv.Itoa是将一个整数类型转化成字符串类型,而我们转换的时候不清楚整数是几位数的整数,若整数位两位以上的,那么Itoa将会返回将是string,若只有一位整数Itoa返回的是byte。所以为了能够兼容2位数以上的转换,我们需要的后面加上...
  2. 因为前面添加了...所以会将string切分成多个byte(string本身就是由多个byte组成)