青训营X豆包MarsCode 技术训练营第三课 | 豆包MarsCode AI 刷题

65 阅读5分钟

问题描述

小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'

代码分析

  1. 二进制字符串相加

    • 你可以直接在二进制字符串上进行相加操作,而不是先将它们转换为十进制整数。这样可以避免大数运算的问题。
    • 你可以从两个二进制字符串的最低位(最右边)开始逐位相加,并处理进位。
  2. 处理进位

    • 在逐位相加时,如果某一位的和大于等于2,则需要进位。
    • 进位可以通过除以2来计算,当前位的结果可以通过模2来计算。
  3. 字符串反转

    • 由于我们从最低位开始相加,最终结果需要反转。

代码

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")

关键步骤解释:

  1. 补齐字符串:使用 zfill 方法将两个二进制字符串补齐到相同长度。
  2. 逐位相加:从最低位开始逐位相加,并处理进位。
  3. 处理最终进位:如果最后还有进位,添加到结果中。
  4. 转换为十进制:将最终的二进制结果转换为十进制并返回。 学习计划:

在当今竞争激烈的学习环境中,掌握高效的学习方法对于提升个人能力至关重要。本文将介绍如何结合豆包MarsCode AI的刷题功能,制定有效的学习计划和利用工具提升学习效率。

  1. 制定刷题计划

    • 明确学习目标:首先,确定你的学习目标,比如掌握特定的编程语言或算法。这将帮助你聚焦于特定的学习领域。
    • 划分学习时间:将每天的学习时间合理分配,比如每天刷题不超过两小时,每次集中精力学习30分钟至1小时。
    • 利用豆包MarsCode AI:通过豆包MarsCode AI的题库,你可以有针对性地练习,系统会根据你的学习进度和效果推荐题目,帮助你动态调整学习计划。
  2. 利用错题进行针对性学习

    • 记录并分析错题:遇到错题时,及时记录并分析错误原因,是知识点不熟悉、理解错误还是粗心大意。
    • 制定复习策略:根据错误原因,制定个性化复习策略,如针对不熟悉的知识点进行深入学习或多做相似题目以加深记忆。
  3. 使用错题本

    • 整理错题:建立错题本,整理刷题过程中的错题,这有助于巩固记忆,并在复习时快速查找。
    • 定期回顾:定期回顾错题本,加深对知识点的理解,防止重复错误。

工具运用:

  1. 个性化学习体验

    • AI刷题功能:AI根据你的答题记录和错误类型,识别薄弱环节,并推送相关练习题目。
    • 结合视频课程:在学习过程中,如果遇到不理解的概念,可以立即查阅相关视频或文本资料,实现理论与实践的结合。
  2. 社交学习平台

    • 互动学习:通过与同学、老师或在线学习社区的互动,获得不同的解题思路和见解,共享学习资源。
    • 在线讨论区:AI刷题功能可以融入在线讨论区,学生可以分享解题过程,收集意见与建议,增强学习的趣味性和知识理解。
  3. 时间管理与学习自律

    • 时间管理工具:结合时间管理工具,如番茄工作法应用,设定学习目标与时间段,合理安排AI刷题与其他学习活动的时间。
    • 实时反馈:利用AI提供的实时反馈,及时调整学习策略,保持对知识的持续兴趣。
  4. 知识巩固与反思

    • 定期回顾:将AI刷题与复习计划结合,通过设置复习提醒和使用间隔重复技术,确保在适当的时间对知识进行再学习。
    • 自我评价:定期自我评价,分析学习效果,识别需要改进的领域。