问题描述
小U和小R喜欢探索二进制数字的奥秘。他们想找到一个方法,将两个二进制字符串相加并以十进制的形式呈现。这个过程需要注意的是,他们的二进制串可能非常长,所以常规的方法可能无法处理大数。小U和小R希望你帮助他们设计一个算法,该算法能在保证时间复杂度不超过O(n^2)的前提下,返回两个二进制字符串的十进制求和结果。
测试样例
样例1:
输入:
binary1 = "101" ,binary2 = "110"
输出:'11'
样例2:
输入:
binary1 = "111111" ,binary2 = "10100"
输出:'83'
样例3:
输入:
binary1 = "111010101001001011" ,binary2 = "100010101001"
输出:'242420'
样例4:
输入:
binary1 = "111010101001011" ,binary2 = "10010101001"
输出:'31220'
样例5:
输入:
binary1 = "11" ,binary2 = "1"
输出:'4'
代码分析
-
二进制字符串相加:
- 你可以直接在二进制字符串上进行相加操作,而不是先将它们转换为十进制整数。这样可以避免大数运算的问题。
- 你可以从两个二进制字符串的最低位(最右边)开始逐位相加,并处理进位。
-
处理进位:
- 在逐位相加时,如果某一位的和大于等于2,则需要进位。
- 进位可以通过除以2来计算,当前位的结果可以通过模2来计算。
-
字符串反转:
- 由于我们从最低位开始相加,最终结果需要反转。
代码
def solution(binary1, binary2): # 初始化结果字符串和进位 result = "" carry = 0
# 将两个二进制字符串补齐到相同长度
max_len = max(len(binary1), len(binary2))
binary1 = binary1.zfill(max_len)
binary2 = binary2.zfill(max_len)
# 从最低位开始逐位相加
for i in range(max_len - 1, -1, -1):
# 计算当前位的和
sum_bit = int(binary1[i]) + int(binary2[i]) + carry
# 计算当前位的结果和进位
result = str(sum_bit % 2) + result
carry = sum_bit // 2
# 如果最后还有进位,添加到结果中
if carry:
result = "1" + result
# 将二进制结果转换为十进制
decimal_result = int(result, 2)
# 将结果转换为字符串并返回
return str(decimal_result)
if name == "main": # 你可以添加更多测试用例 print(solution("101", "110") == "11") print(solution("111111", "10100") == "83") print(solution("111010101001001011", "100010101001") == "242420") print(solution("111010101001011", "10010101001") == "31220")
关键步骤解释:
- 补齐字符串:使用
zfill方法将两个二进制字符串补齐到相同长度。 - 逐位相加:从最低位开始逐位相加,并处理进位。
- 处理最终进位:如果最后还有进位,添加到结果中。
- 转换为十进制:将最终的二进制结果转换为十进制并返回。 学习计划:
在当今竞争激烈的学习环境中,掌握高效的学习方法对于提升个人能力至关重要。本文将介绍如何结合豆包MarsCode AI的刷题功能,制定有效的学习计划和利用工具提升学习效率。
-
制定刷题计划
- 明确学习目标:首先,确定你的学习目标,比如掌握特定的编程语言或算法。这将帮助你聚焦于特定的学习领域。
- 划分学习时间:将每天的学习时间合理分配,比如每天刷题不超过两小时,每次集中精力学习30分钟至1小时。
- 利用豆包MarsCode AI:通过豆包MarsCode AI的题库,你可以有针对性地练习,系统会根据你的学习进度和效果推荐题目,帮助你动态调整学习计划。
-
利用错题进行针对性学习
- 记录并分析错题:遇到错题时,及时记录并分析错误原因,是知识点不熟悉、理解错误还是粗心大意。
- 制定复习策略:根据错误原因,制定个性化复习策略,如针对不熟悉的知识点进行深入学习或多做相似题目以加深记忆。
-
使用错题本
- 整理错题:建立错题本,整理刷题过程中的错题,这有助于巩固记忆,并在复习时快速查找。
- 定期回顾:定期回顾错题本,加深对知识点的理解,防止重复错误。
工具运用:
-
个性化学习体验
- AI刷题功能:AI根据你的答题记录和错误类型,识别薄弱环节,并推送相关练习题目。
- 结合视频课程:在学习过程中,如果遇到不理解的概念,可以立即查阅相关视频或文本资料,实现理论与实践的结合。
-
社交学习平台
- 互动学习:通过与同学、老师或在线学习社区的互动,获得不同的解题思路和见解,共享学习资源。
- 在线讨论区:AI刷题功能可以融入在线讨论区,学生可以分享解题过程,收集意见与建议,增强学习的趣味性和知识理解。
-
时间管理与学习自律
- 时间管理工具:结合时间管理工具,如番茄工作法应用,设定学习目标与时间段,合理安排AI刷题与其他学习活动的时间。
- 实时反馈:利用AI提供的实时反馈,及时调整学习策略,保持对知识的持续兴趣。
-
知识巩固与反思
- 定期回顾:将AI刷题与复习计划结合,通过设置复习提醒和使用间隔重复技术,确保在适当的时间对知识进行再学习。
- 自我评价:定期自我评价,分析学习效果,识别需要改进的领域。