返回介绍

solution / 1500-1599 / 1556.Thousand Separator / README

发布于 2024-06-17 01:03:18 字数 2647 浏览 0 评论 0 收藏 0

1556. 千位分隔数

English Version

题目描述

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

 

示例 1:

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

示例 2:

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

示例 3:

输入:n = 123456789
输出:"123.456.789"

示例 4:

输入:n = 0
输出:"0"

 

提示:

  • 0 <= n < 2^31

解法

方法一:模拟

直接按照题目要求模拟即可。

时间复杂度 $O(\log n)$,忽略答案的空间消耗,空间复杂度 $O(1)$。

class Solution:
  def thousandSeparator(self, n: int) -> str:
    cnt = 0
    ans = []
    while 1:
      n, v = divmod(n, 10)
      ans.append(str(v))
      cnt += 1
      if n == 0:
        break
      if cnt == 3:
        ans.append('.')
        cnt = 0
    return ''.join(ans[::-1])
class Solution {
  public String thousandSeparator(int n) {
    int cnt = 0;
    StringBuilder ans = new StringBuilder();
    while (true) {
      int v = n % 10;
      n /= 10;
      ans.append(v);
      ++cnt;
      if (n == 0) {
        break;
      }
      if (cnt == 3) {
        ans.append('.');
        cnt = 0;
      }
    }
    return ans.reverse().toString();
  }
}
class Solution {
public:
  string thousandSeparator(int n) {
    int cnt = 0;
    string ans;
    while (1) {
      int v = n % 10;
      n /= 10;
      ans += to_string(v);
      if (n == 0) break;
      if (++cnt == 3) {
        ans += '.';
        cnt = 0;
      }
    }
    reverse(ans.begin(), ans.end());
    return ans;
  }
};
func thousandSeparator(n int) string {
  cnt := 0
  ans := []byte{}
  for {
    v := n % 10
    n /= 10
    ans = append(ans, byte('0'+v))
    if n == 0 {
      break
    }
    cnt++
    if cnt == 3 {
      ans = append(ans, '.')
      cnt = 0
    }
  }
  for i, j := 0, len(ans)-1; i < j; i, j = i+1, j-1 {
    ans[i], ans[j] = ans[j], ans[i]
  }
  return string(ans)
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文