Easy

题目描述

给你一个整数 n ,请你每隔三位添加一个点号(".")作为千位分隔符,并将结果以字符串格式返回。

示例 1:

输入:n = 987
输出:"987"

示例 2:

输入:n = 1234
输出:"1.234"

约束条件:

  • 0 <= n <= 2^31 - 1

提示:

  • 从整数的末尾开始扫描,使用点号连接长度为3的块,除了最后一块。

解题思路

这道题要求我们给数字添加千位分隔符。有几种常见的解法:

方法一:字符串操作法 将数字转换为字符串,然后从右往左每三位添加一个点号。具体步骤:

  1. 将数字转为字符串
  2. 从右向左遍历,每三位添加一个点号
  3. 注意处理边界情况,避免在开头添加点号

方法二:数学方法 通过取余和整除操作,逐步提取数字的每三位,然后拼接结果字符串。

方法三:直接使用内置函数(部分语言支持) 某些语言提供了格式化数字的内置函数。

推荐使用方法一,因为它思路清晰,代码简洁,易于理解和实现。核心思想是从右往左处理数字字符串,每遇到三的倍数位置就添加分隔符。

代码实现

class Solution {
public:
    string thousandSeparator(int n) {
        string s = to_string(n);
        string result = "";
        int len = s.length();
        
        for (int i = 0; i < len; i++) {
            if (i > 0 && (len - i) % 3 == 0) {
                result += ".";
            }
            result += s[i];
        }
        
        return result;
    }
};
class Solution:
    def thousandSeparator(self, n: int) -> str:
        s = str(n)
        result = ""
        length = len(s)
        
        for i in range(length):
            if i > 0 and (length - i) % 3 == 0:
                result += "."
            result += s[i]
        
        return result
public class Solution {
    public string ThousandSeparator(int n) {
        string s = n.ToString();
        string result = "";
        int length = s.Length;
        
        for (int i = 0; i < length; i++) {
            if (i > 0 && (length - i) % 3 == 0) {
                result += ".";
            }
            result += s[i];
        }
        
        return result;
    }
}
/**
 * @param {number} n
 * @return {string}
 */
var thousandSeparator = function(n) {
    return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
};

复杂度分析

复杂度分析
时间复杂度O(log n)
空间复杂度O(log n)

说明:

  • 时间复杂度:需要遍历数字的所有位数,位数为 O(log n)
  • 空间复杂度:需要存储结果字符串,长度为 O(log n)