数字字符串格式化 | 豆包MarsCode AI 刷题

124 阅读4分钟

首先,让我们解决小M的问题,编写一个程序来将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并去除前面的无用的0。 def format_number(num_str): # 移除字符串前面的0 num_str = num_str.lstrip('0') # 如果字符串为空或仅包含0,则返回'0' if not num_str or num_str == '.': return '0' # 移除字符串前面的'0'后,如果第一个字符是'.',则添加'0'以保持数值的正确性 if num_str[0] == '.': num_str = '0' + num_str # 分离整数部分和小数部分 if '.' in num_str: integer_part, decimal_part = num_str.split('.') else: integer_part, decimal_part = num_str, '' # 将整数部分转换为带千分位逗号的格式 integer_part = ''.join([',' + i if (len(integer_part) - idx) % 3 == 0 and idx != 0 else i for idx, i in enumerate(integer_part)]) # 将整数部分和小数部分重新组合 formatted_number = integer_part + ('.' + decimal_part if decimal_part else '') return formatted_number

示例

print(format_number("0000123456.789")) # 输出: "1,234,567.89" print(format_number("0000000.0001")) # 输出: "0.0001" print(format_number("0000")) # 输出: "0" 题目解析 这个问题的解决方法可以分为几个步骤: 去除字符串前面的无用的0。 分离整数部分和小数部分。 对整数部分进行格式化,每三位添加一个逗号。 将格式化后的整数部分和小数部分重新组合。 知识总结 字符串操作:lstrip(), split(), join() 列表推导式:用于构建列表的简洁方式 字符串和数字的处理:在处理数字字符串时,需要注意小数点和前导0的情况 学习计划 制定刷题计划:每天至少解决一道题目,从简单到复杂,逐渐提高难度。 利用错题本:记录自己容易出错的题目,定期复习。 针对性学习:针对自己的弱点,选择相关的题目进行练习。 工具运用 AI 刷题功能:可以使用AI刷题工具来提供题目和解决方案,帮助理解解题思路。 其他学习资源:结合在线教程、书籍和社区讨论,来加深对算法和数据结构的理解。 这个程序的时间复杂度是O(n),其中n是输入字符串的长度,因为我们只遍历了字符串一次。额外空间的使用被最小化,因为我们没有使用额外的数据结构来存储中间结果,只是简单地处理了原始字符串。 平衡刷题和理论学习是提高编程和算法技能的有效途径。以下是一些建议,可以帮助你在这两者之间找到平衡:

  1. 制定计划 明确目标:确定你想要达到的学习目标。比如,是为了准备面试、提高解决实际问题的能力,还是为了参加算法竞赛。 时间分配:根据你的目标,合理分配刷题和理论学习的时间。例如,你可以决定每周刷题和理论学习各占一半的时间。
  2. 理论学习 基础知识:首先,确保你有扎实的理论基础。这包括数据结构、算法、复杂度分析等。 适时复习:理论学习不应该是一次性的。你应该定期复习,以加深理解和记忆。 实践应用:尝试将理论知识应用到实际问题中,这有助于加深理解。
  3. 刷题实践 由易到难:开始时,从简单的题目开始刷起,逐渐增加难度。 多样化:尝试不同类型和领域的题目,以拓宽你的视野。 反思总结:每做完一道题目,都要花时间反思和总结。这可以帮助你巩固知识点,并为以后遇到类似问题打下基础。
  4. 结合使用 理论与实践相结合:在学习一个新概念或算法后,立即尝试相关的题目。 交叉学习:在刷题过程中遇到不理解的概念,可以回到理论学习中寻找答案。
  5. 调整与优化 定期评估:定期评估你的学习进度和效果,根据实际情况调整你的计划。 寻求反馈:向他人(如老师、同学或在线社区)寻求反馈,以了解你的强项和弱点。
  6. 其他建议 保持耐心:学习是一个长期的过程,不要因为短期内没有显著进步而气馁。 休息与放松:适当的休息和放松对于长期学习同样重要。 通过以上方法,你可以在刷题和理论学习之间找到适合自己的平衡点,从而更有效地提高你的编程和算法技能。