一、题目解析:数字字符串格式化
问题描述
小M在工作时遇到了一个问题,他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。小M还发现,有时候输入的数字字符串前面会有无用的 0,这些也需要精简掉。请你帮助小M编写程序,完成这个任务。
测试样例:
样例1:
输入:
s = "1294512.12412"
输出:'1,294,512.12412'
题目思路:
- 题目分析:
我们需要将一个不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。此外,输入的数字字符串前面可能会有无用的0,这些也需要精简掉。 - 算法设计:
去除前导零:使用正则表达式或字符串操作去除字符串前面的无用0。
分割整数和小数部分:使用split方法将字符串分割为整数部分和小数部分。
处理整数部分:从后向前遍历整数部分,每三位插入一个逗号,使用StringBuilder来高效地构建结果字符串。
合并结果:将处理后的整数部分和小数部分合并,返回结果。 - 代码实现(Java) :
public class Main {
public static String solution(String s) {
String[] str = s.replaceFirst("^0+(?!$)","").split("\\.");
String str1 = str[0];
String str2 = str.length > 1 ? "." + str[1] : "";
StringBuilder str3 = new StringBuilder();
int count = 0;
for (int i = str1.length() - 1; i >= 0; i--) {
str3.append(str1.charAt(i));
count++;
if (count % 3 == 0 && i != 0) {
str3.append(",");
}
}
str3.reverse();
return str3.toString() + str2;
}
public static void main(String[] args) {
System.out.println(solution("1294512.12412").equals("1,294,512.12412"));
System.out.println(solution("0000123456789.99").equals("123,456,789.99"));
System.out.println(solution("987654321").equals("987,654,321"));
}
}
二、知识总结
代码解析
去除前导零:
- 使用
replaceFirst("^0+(?!$)", "")去除字符串前面的无用0。
分割整数和小数部分:
- 使用
split("\.")将字符串分割为整数部分和小数部分。
处理整数部分:
- 从后向前遍历整数部分,每三位插入一个逗号。
- 使用
StringBuilder来高效地构建结果字符串。
合并结果:
- 将处理后的整数部分和小数部分合并,返回结果。
代码优化 / 维护:
-
代码可读性:
- 可以考虑将一些逻辑提取到单独的方法中,以提高代码的可读性和可维护性。
-
边界条件:
- 确保处理边界条件,例如输入为空字符串或只有小数部分的情况。
三、学习计划
高效利用豆包MarsCode AI
新手刷题可以使用以下高效学习方法:
- 明确目标,规划时间:每天坚持刷题,从简到难。可以使用豆包MarsCode AI中的“每日推荐”功能制定每日刷题目标,并合理分配时间。
- 解析并记录错题:错题重点关注思路和代码实现的差距。通过豆包MarsCode AI的解析功能,找到重难点,并记录在笔记中。
- 遇难题逐步突破:将较复杂的题目拆解为小步骤,利用AI的提示功能逐个实现。
错题学习建议
- 回顾易错知识点。
- 对比代码与解析代码,找出差异。
四、工具运用
豆包MarsCode AI 在刷题中可以提供十分详细的题解和代码智能纠错功能,还可以寻找网上相关资源整合解决难点:
- 参考书籍:例如《算法导论》等。
- 在线文档和视频:结合LeetCode、Github等平台的算法教程,与豆包MarsCode解析互补使用。
- 实践项目:将学到的知识应用于实践项目,进一步加深理解。
五、总结
通过使用豆包MarsCode AI 刷题工具,使得解题效率、知识总结和错题分析等能力上得到了明显提升。
与相同青训营的同好之志一同学习也能增进相关的结识,与之一同进步,希望这篇分享文章能够帮助到同为初学者之志。