跳至主要內容

1556. 千位分隔数


1556. 千位分隔数

🟢   🔖  字符串  🔗 力扣open in new window LeetCodeopen in new window

题目

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

解题思路

  1. 将数字 n 转换为字符串格式,方便进行字符串操作。
  2. 初始化指针 p,指向字符串的最后一个字符位置(n.length - 1)。
  3. 使用一个 while 循环,当指针 p 超过 2 时,每次切片字符串并插入 .
    • n.slice(0, p - 2) 提取从起始位置到 p - 3 的部分。
    • n.slice(p - 2) 提取从 p - 2 开始的剩余部分。
    • 拼接这两个部分,中间插入一个 .
  4. 每次循环后,将 p 的位置减去 3,表示移动到下一个分隔符插入点。
  5. 最后返回完整的字符串。

复杂度分析

  • 时间复杂度O(k),其中 kn 的位数,循环过程中每次减少 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;
};