字符串题目:千位分隔数

题目

标题和出处

标题:千位分隔数

出处:1556. 千位分隔数

难度

2 级

题目描述

要求

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

示例

示例 1:

输入: n   =   987 \texttt{n = 987} n = 987
输出: "987" \texttt{"987"} "987"

示例 2:

输入: n   =   1234 \texttt{n = 1234} n = 1234
输出: "1.234" \texttt{"1.234"} "1.234"

示例 3:

输入: n   =   123456789 \texttt{n = 123456789} n = 123456789
输出: "123.456.789" \texttt{"123.456.789"} "123.456.789"

示例 4:

输入: n   =   0 \texttt{n = 0} n = 0
输出: "0" \texttt{"0"} "0"

数据范围

  • 0 ≤ n < 2 31 \texttt{0} \le \texttt{n} < \texttt{2}^\texttt{31} 0n<231

解法

思路和算法

要给非负整数 n n n 添加千位分隔符,需要首先知道 n n n 的位数。直观的做法是将 n n n 转化成字符串,但是该做法需要多创建一个字符串。另一种做法是对整数 n n n 进行遍历,得到位数。

可以通过计算 n n n 除以 10 10 10 的余数得到 n n n 的最低位,然后使用整数除法将 n n n 除以 10 10 10,即可去掉 n n n 的最低位。重复上述操作直到 n n n 变成 0 0 0,即可知道 n n n 的位数以及从低到高的每一位的数字。

按照从低到高的顺序遍历 n n n 的每一位数字,每三位添加一个分隔符,即可在正确的位置添加千位分隔符。需要注意的是,遍历到 n n n 的最高位之后,不再添加分隔符。

例如,对于 n = 123456789 n = 123456789 n=123456789,按照从低到高的顺序遍历 n n n 的每一位数字,每三位添加一个分隔符,得到的结果是 “ 987.654.321 " \text{``}987.654.321" 987.654.321",当遍历到数位 7 7 7 4 4 4 1 1 1 时,遍历的位数为 3 3 3 的倍数,数位 7 7 7 4 4 4 的后面各添加一个分隔符,数位 1 1 1 由于是最高位因此不在其后面添加分隔符。

按照上述方法遍历和添加分隔符之后,得到的结果和数字 n n n 相比为左右翻转之后的结果,将该结果反转即可得到数字 n n n 添加千位分隔符之后的结果。

上述做法中,按照从低到高的顺序遍历 n n n 的每一位数字的结束条件是 n n n 变成 0 0 0,对于 n > 0 n > 0 n>0 的情况都是正确的,但是对于 n = 0 n = 0 n=0 的情况就会出现错误,导致返回空字符串。因此,对于 n = 0 n = 0 n=0 的情况需要另外判断,当 n = 0 n = 0 n=0 时直接返回 “ 0 " \text{``}0" 0"

代码

class Solution {
    public String thousandSeparator(int n) {
        if (n == 0) {
            return "0";
        }
        StringBuffer sb = new StringBuffer();
        int count = 0;
        while (n > 0) {
            sb.append(n % 10);
            n /= 10;
            count++;
            if (count % 3 == 0 && n > 0) {
                sb.append('.');
            }
        }
        sb.reverse();
        return sb.toString();
    }
}

复杂度分析

  • 时间复杂度: O ( log ⁡ 10 n ) O(\log_{10} n) O(log10n)。需要遍历的位数和字符串长度都是 O ( log ⁡ 10 n ) O(\log_{10} n) O(log10n)

  • 空间复杂度: O ( log ⁡ 10 n ) O(\log_{10} n) O(log10n)。需要创建一个长度为 O ( log ⁡ 10 n ) O(\log_{10} n) O(log10n) 的字符串存储添加千位分隔符之后的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟大的车尔尼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值