1556. 千位分隔数
1556. 千位分隔数
题目
Given an integer n
, add a dot (".") as the thousands separator and return it in string format.
Example 1:
Input: n = 987
Output: "987"
Example 2:
Input: n = 1234
Output: "1.234"
Constraints:
0 <= n <= 231 - 1
题目大意
给你一个整数 n
,请你每隔三位添加点(即 "." 符号)作为千位分隔符,并将结果以字符串格式返回。
示例 1:
输入: n = 987
输出: "987"
示例 2:
输入: n = 1234
输出: "1.234"
示例 3:
输入: n = 123456789
输出: "123.456.789"
示例 4:
输入: n = 0
输出: "0"
提示:
0 <= n < 2^31
解题思路
- 将数字
n
转换为字符串格式,方便进行字符串操作。 - 初始化指针
p
,指向字符串的最后一个字符位置(n.length - 1
)。 - 使用一个
while
循环,当指针p
超过 2 时,每次切片字符串并插入.
:n.slice(0, p - 2)
提取从起始位置到p - 3
的部分。n.slice(p - 2)
提取从p - 2
开始的剩余部分。- 拼接这两个部分,中间插入一个
.
。
- 每次循环后,将
p
的位置减去 3,表示移动到下一个分隔符插入点。 - 最后返回完整的字符串。
复杂度分析
- 时间复杂度:
O(k)
,其中k
是n
的位数,循环过程中每次减少 3 位,总共需要O((length of n) / 3)
次操作。 - 空间复杂度:
O(1)
,在原字符串基础上操作,未使用额外的存储结构。
代码
/**
* @param {number} n
* @return {string}
*/
var thousandSeparator = function (n) {
n = '' + n;
let p = n.length - 1;
while (p > 2) {
n = n.slice(0, p - 2) + '.' + n.slice(p - 2);
p -= 3;
}
return n;
};