标签: 字符串
难度: Easy
给你一个整数 n
,请你每隔三位添加点(即 "." 符号)作为千位分隔符,并将结果以字符串格式返回。
示例 1:
输入:n = 987 输出:"987"
示例 2:
输入:n = 1234 输出:"1.234"
示例 3:
输入:n = 123456789 输出:"123.456.789"
示例 4:
输入:n = 0 输出:"0"
提示:
0 <= n < 2^31
标签: 字符串
难度: Easy
给你一个整数 n
,请你每隔三位添加点(即 "." 符号)作为千位分隔符,并将结果以字符串格式返回。
示例 1:
输入:n = 987 输出:"987"
示例 2:
输入:n = 1234 输出:"1.234"
示例 3:
输入:n = 123456789 输出:"123.456.789"
示例 4:
输入:n = 0 输出:"0"
提示:
0 <= n < 2^31
运行时间: 20 ms
内存: 16.5 MB
class Solution: def thousandSeparator(self, n: int) -> str: n = str(n) n_digit = len(n) if n_digit < 4: return n else: result = '' for i in range((n_digit-1)//3): if i == 0: result = '.' + n[-3:] else: result = '.' + n[-3*(i+1):-3*i] + result remain = n_digit % 3 if remain == 0: result = n[:3] + result else: result = n[:remain] + result return result
该题解首先将整数转换为字符串,以便于处理每个字符。接着,根据字符串的长度决定是否需要添加分隔符。如果字符串长度小于4,直接返回原字符串。对于长度大于等于4的情况,通过从字符串末尾开始,每三个字符插入一个分隔符'.'来构造结果。使用一个循环,每次迭代添加一个'.'和之后的三个字符。循环结束后,根据字符串长度是否能被3整除,决定如何处理前面剩余的字符。最终返回构造好的字符串。
时间复杂度: O(n)
空间复杂度: O(n)
class Solution: def thousandSeparator(self, n: int) -> str: n = str(n) # 将整数n转换为字符串 n_digit = len(n) # 计算字符串的长度 if n_digit < 4: # 如果长度小于4,直接返回 return n else: result = '' # 初始化结果字符串 for i in range((n_digit-1)//3): # 按每三位进行循环处理 if i == 0: result = '.' + n[-3:] # 添加最后三位和分隔符 else: result = '.' + n[-3*(i+1):-3*i] + result # 添加新的三位和分隔符 remain = n_digit % 3 # 计算剩余位数 if remain == 0: result = n[:3] + result # 如果刚好被3整除,添加前三位 else: result = n[:remain] + result # 添加剩余的不足三位 return result
选择长度小于4的界限是因为,根据题目要求,只有当数字的位数达到或超过4位时才需要添加分隔符。对于3位及以下的数字,其长度不足以形成一个完整的千位分割组(即没有足够的空间插入分隔符),因此直接返回原始数字的字符串形式是合理且符合题目要求的。
在处理非常大的数字时,这种基于字符串的循环添加分隔符的方法效率较低。尽管字符串操作在Python中相对高效,但每次插入分隔符都可能涉及到字符串的拷贝和重新构建,这在数字非常大时会导致效率下降。如果数字位数极大,这种方法的时间和空间复杂度会上升,因为每次循环都可能生成新的字符串对象。
为了确保在数字长度正好是3的倍数时不在字符串最前面错误地添加一个分隔符,题解中采用了一个条件检查。通过判断剩余位数(`remain`)是否为0来决定如何添加剩余的位数。如果`remain`为0,意味着整个数字可以完全按每三位进行分割,不需要在最前面添加分隔符。题解中通过这种方式处理,确保了不会在不适当的位置添加分隔符,从而得到正确格式化的输出。