Easy
题目描述
给你一个整数 n ,请你每隔三位添加一个点号(".")作为千位分隔符,并将结果以字符串格式返回。
示例 1:
输入:n = 987
输出:"987"
示例 2:
输入:n = 1234
输出:"1.234"
约束条件:
0 <= n <= 2^31 - 1
提示:
- 从整数的末尾开始扫描,使用点号连接长度为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)