数字字符串格式化——题目分析及实现

163 阅读2分钟

题目描述

给定一个数字字符串s,该字符串可能包含前导零,也可能是一个浮点数。我们的任务是移除所有前导零,并将整数部分转换为带有千分位逗号的格式,同时保持原有的小数部分不变。

解决方案

为了有效地解决这个问题,我们可以遵循以下步骤来设计算法:

  1. 去除前导零:首先,我们需要从输入字符串中移除所有的前导零。这可以通过Python中的lstrip('0')方法轻松实现。如果原始字符串全是零,则最终结果应为"0"。
  2. 分离整数和小数部分:接下来,检查字符串中是否含有小数点。如果有,使用split('.')方法将字符串分割成两部分:整数部分和小数部分。如果没有小数点,那么整个字符串就是整数部分,小数部分为空。
  3. 格式化整数部分:对于整数部分,我们需要从右向左遍历每一个字符,并在每三个字符之后插入一个逗号。这里需要注意的是,我们只在非首位的地方添加逗号,以避免不必要的符号出现。
  4. 合并整数和小数部分:最后一步是将格式化后的整数部分与小数部分重新组合起来。如果有小数部分,就在两者之间加上小数点;如果没有小数部分,直接返回格式化后的整数部分。

示例代码

下面是一个基于上述逻辑实现的Python函数,用于完成数字字符串的格式化任务:

def solution(s: str) -> str:
    # 去除前导零
    s = s.lstrip('0')
    
    # 如果字符串全是零,返回"0"
    if not s:
        return "0"
    
    # 分离整数和小数部分
    if '.' in s:
        integer_part, fractional_part = s.split('.')
    else:
        integer_part, fractional_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 fractional_part:
        return formatted_integer + '.' + fractional_part
    else:
        return formatted_integer