Golang:
思路:需要注意的是,这题并不要求你改变输入参数里切片的长度,换句话来说:输入[a,a,b,b,b,c],并不需要你将这个数组变成[a,2,b,3,c],而是只要修改为[a,2,b,3,c,c],并返回5即可。那么就可以用双指针,再加一个下标表示从当前哪个位置开始修改数组,这样就能完成这道题。当然,仍然需要处理数组到达最后一位的情况。
代码如下:
func compress(chars []byte) int {
if len(chars)<=1 {
return len(chars)
}
wri:=1//(从当前这位开始写)
i,j:=0,1
for j<len(chars){
if j==len(chars)-1&&chars[j]==chars[i] {
m:=strconv.Itoa(j-i+1)
for t:=0;t<len(m);t++{
chars[wri]=m[t]
wri++
}
break
}
if chars[j]!=chars[i] {
if j-i>1 {
s:=strconv.Itoa(j-i)
for t:=0;t<len(s);t++{
chars[wri]=s[t]
wri++
}
}
chars[wri]=chars[j]
wri++
i=j
}
j++
}
return wri
}
有疑问加站长微信联系(非本文作者)