题目描述
给定一个整数 n
,请你每隔三位添加点(即 .
符号)作为千位分隔符,并将结果以字符串格式返回。
样例
输入:n = 987
输出:"987"
输入:n = 1234
输出:"1.234"
输入:n = 123456789
输出:"123.456.789"
输入:n = 0
输出:"0"
限制
0 <= n < 2^31
算法
(模拟) $O(\log n)$
- 直接模拟,每次将
n
模 10 放进字符串中,然后n
再除以 10,直到n
为 0。如果次数达到 3 次,就加入.
到字符串中。 - 最后将字符串翻转。
- 注意特判
n
为 0 时直接返回0
。
时间复杂度
- 时间复杂度和
n
的数位相同,故为 $O(\log n)$。
空间复杂度
- 需要 $O(\log n)$ 的额外空间存储答案。
Go 代码
func thousandSeparator(n int) string {
if n == 0 {
return "0"
}
const maxL = 15
res := make([]byte, 0, maxL)
counter := 0
for n > 0 {
if counter == 3 {
res = append(res, '.')
counter = 0
}
c := byte(n%10 + '0')
n /= 10
res = append(res, c)
counter++
}
i, j := 0, len(res)-1
for i < j {
res[i], res[j] = res[j], res[i]
i++
j--
}
return string(res)
}