No.193 - LeetCode415. Add Strings - go代码预留内存很提速度

  • 关键在于预分配string的内存

写法1,很慢,打败11%

func addStrings(num1 string, num2 string) string {
	la := len(num1)
	lb := len(num2)
	if lb > la{
		num1,num2 = num2,num1
		la,lb = lb,la
	}
	var(
		ans string
		tmp byte = 0
		achar byte
		bchar byte
	)
	for i:=1;i<=lb;i++{
		achar = num1[la-i] - '0'
		bchar = num2[lb-i] - '0'
		ans = string((achar+bchar+tmp)%10 + '0') + ans
		tmp = (achar+bchar+tmp)/10
	}
	for i:=la-lb-1;i>=0;i--{
		achar = num1[i] - '0'
		ans = string((achar+tmp)%10 + '0') + ans
		tmp = (achar+tmp)/10
	}
	if tmp != 0{
		ans = string(tmp + '0') + ans
	}
	return ans
}

写法2,打败100%

func addStrings(num1 string, num2 string) string {
	la := len(num1)
	lb := len(num2)
	if lb > la{
		num1,num2 = num2,num1
		la,lb = lb,la
	}
	var(
		ans = make([]byte,la+1)
		tmp byte = 0
		achar byte
		bchar byte
	)
	for i:=1;i<=lb;i++{
		achar = num1[la-i] - '0'
		bchar = num2[lb-i] - '0'
		ans[la-i+1] = (achar+bchar+tmp)%10 + '0'
		tmp = (achar+bchar+tmp)/10
	}
	for i:=la-lb-1;i>=0;i--{
		achar = num1[i] - '0'
		ans[i+1] = (achar+tmp)%10 + '0'
		tmp = (achar+tmp)/10
	}
	if tmp != 0{
		ans[0] = tmp + '0'
		return string(ans)
	}
	return string(ans[1:])
}

你可能感兴趣的:(leetcode)