3. 数字字符串格式化

AI 概述
问题描述测试样例问题理解解题思路具体步骤数据结构选择算法步骤开始解题代码解释 刷题前请喊一遍我们的口号: 方法不对,刷题白费。 节省时间,精准刷题。 本题难度系数:⭐简单 问题描述 小 M 在工作时遇到了一个问题,他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格...
目录
文章目录隐藏
  1. 问题描述
  2. 测试样例
  3. 问题理解
  4. 解题思路
  5. 具体步骤
  6. 数据结构选择
  7. 算法步骤
  8. 开始解题

刷题前请喊一遍我们的口号:

  • 方法不对,刷题白费。
  • 节省时间,精准刷题。

本题难度系数:⭐简单

问题描述

小 M 在工作时遇到了一个问题,他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。小 M 还发现,有时候输入的数字字符串前面会有无用的 0,这些也需要精简掉。请你帮助小 M 编写程序,完成这个任务。

测试样例

样例 1:

输入:s = "1294512.12412"
输出:'1,294,512.12412'

样例 2:

输入:s = "0000123456789.99"
输出:'123,456,789.99'

样例 3:

输入:s = "987654321"
输出:'987,654,321'


问题理解

我们需要将输入的数字字符串转换为带千分位逗号的格式,并且保留小数部分。同时,如果输入的数字字符串前面有无效的 0,我们需要将这些 0 去掉。

解题思路

  1. 去除前导零:首先,我们需要去掉字符串前面的无效 0。例如,0000123456789.99 应该变成 123456789.99
  2. 分割整数和小数部分:将字符串按小数点 . 分割成整数部分和小数部分。
  3. 添加千分位逗号:对整数部分进行处理,每隔三位插入一个逗号 ,。例如,123456789 应该变成 123,456,789
  4. 合并结果:将处理后的整数部分和小数部分合并,得到最终的结果。

具体步骤

  1. 去除前导零:可以使用正则表达式或者循环来去掉字符串前面的 0
  2. 分割整数和小数部分:使用 split('.') 方法将字符串分割成两部分。
  3. 添加千分位逗号:可以使用正则表达式或者循环来处理整数部分,每隔三位插入一个逗号。
  4. 合并结果:将处理后的整数部分和小数部分用 . 连接起来。

数据结构选择

  • 字符串处理:使用字符串的内置方法(如 splitreplace 等)来处理字符串。
  • 正则表达式:可以使用正则表达式来简化字符串的处理。

算法步骤

  1. 去掉前导零。
  2. 分割整数和小数部分。
  3. 对整数部分添加千分位逗号。
  4. 合并整数和小数部分,返回结果。

希望这些思路能帮助你更好地解决问题!如果你有进一步的问题或需要更多的提示,请随时告诉我。


开始解题

实现代码:

function solution(s) {
    // 去除前导零
    s = s.replace(/^0+/, '');
    if (s === '') s = '0'; // 如果全部是零,保留一个零

    // 分割整数和小数部分
    let [integerPart, decimalPart = ''] = s.split('.');

    // 添加千分位逗号
    integerPart = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ',');

    // 合并结果
    return decimalPart ? `${integerPart}.${decimalPart}` : integerPart;
}

function main() {
    console.log(solution("1294512.12412") === '1,294,512.12412'); // true
    console.log(solution("0000123456789.99") === '123,456,789.99'); // true
    console.log(solution("987654321") === '987,654,321'); // true
}

main();

代码解释

  1. 去除前导零:使用正则表达式 replace(/^0+/, '') 去除字符串前面的所有零。如果字符串全部是零,则保留一个零。
  2. 分割整数和小数部分:使用 split('.') 将字符串分割成整数部分和小数部分。如果小数部分不存在,则默认为空字符串。
  3. 添加千分位逗号:使用正则表达式 replace(/\B(?=(\d{3})+(?!\d))/g, ',') 在整数部分每三位添加一个逗号。
  4. 合并结果:根据小数部分是否存在,将整数部分和小数部分合并成最终结果。

这个代码的时间复杂度是 O(n),其中 n 是输入字符串的长度,空间复杂度也是 O(n),因为我们需要存储处理后的字符串。这个实现是相对高效的,适用于大多数情况。

以上关于3. 数字字符串格式化的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 3. 数字字符串格式化

发表回复