青训营X豆包MarsCode 技术训练营数字字符串格式化 | 豆包MarsCode AI 刷题

57 阅读1分钟

问题理解

我们需要将一个不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。同时,输入的数字字符串前面可能会有无用的 0,这些也需要精简掉。

数据结构选择

  • 字符串:因为我们需要处理字符串的格式化。

算法步骤

  1. 去除前导零:首先,我们需要去除字符串前面的无用 0。可以使用 strip 方法来去除前导零。
  2. 分离整数和小数部分:将字符串分为整数部分和小数部分。可以使用 split 方法来分离。
  3. 格式化整数部分:对整数部分进行千分位格式化。可以使用 reversedjoin 方法来实现。
  4. 合并整数和小数部分:将格式化后的整数部分和小数部分合并。

伪代码

def solution(s: str) -> str:
    # 去除前导零
    s = s.lstrip('0')
    
    # 分离整数和小数部分
    if '.' in s:
        integer_part, decimal_part = s.split('.')
    else:
        integer_part, decimal_part = s, ''
    
    # 格式化整数部分
    formatted_integer = ''
    for i, char in enumerate(reversed(integer_part)):
        if i > 0 and i % 3 == 0:
            formatted_integer = ',' + formatted_integer
        formatted_integer = char + formatted_integer
    
    # 合并整数和小数部分
    if decimal_part:
        return f"{formatted_integer}.{decimal_part}"
    else:
        return formatted_integer

注意以下几点:

  • 使用 lstrip('0') 去除前导零。
  • 使用 split('.') 分离整数和小数部分。
  • 使用 reversedjoin 方法来格式化整数