青训营X豆包MarsCode 技术训练营题目解析——二进制之和| 豆包MarsCode AI 刷题

60 阅读4分钟

这道题目要求将两个二进制字符串相加并返回它们的十进制求和结果。需要注意的是,二进制字符串的长度可能非常大,因此需要在计算时保证算法的效率。


解题思路

  1. 理解输入和输出

    • 输入是两个二进制字符串 binary1binary2
    • 输出是它们相加后的十进制结果,作为字符串返回。
  2. 解题步骤

    • 二进制转十进制:

      • 二进制字符串可以直接转为整数,用 Python 提供的 int(binary, 2) 实现。
      • 例如:int("101", 2) 返回十进制整数 5
    • 十进制求和:

      • 将两个转换后的十进制数相加即可。
    • 十进制结果转换为字符串:

      • str() 方法将结果转为字符串形式。
  3. 为什么 Python 可以处理大数?

    • Python 的整数类型是动态调整的,不受字节限制,因此可以直接处理任意长度的整数。
  4. 算法复杂度分析

    • 转换二进制到十进制的时间复杂度为 O(n1+n2)O(n_1 + n_2),其中 n1n_1 和 n2n_2 是两个二进制字符串的长度。
    • 求和和转换为字符串的复杂度是 O(n)O(n)。
    • 总复杂度为 O(n)O(n) ,其中 nn 是两个二进制字符串的总长度。

代码实现

以下是直接实现的代码:

def binary_to_decimal_sum(binary1, binary2):
    # Step 1: 将二进制字符串转换为十进制整数
    num1 = int(binary1, 2)
    num2 = int(binary2, 2)
    
    # Step 2: 计算两个十进制整数的和
    decimal_sum = num1 + num2
    
    # Step 3: 将结果转换为字符串并返回
    return str(decimal_sum)

# 测试用例
if __name__ == "__main__":
    print(binary_to_decimal_sum("101", "110"))  # 输出: '11'
    print(binary_to_decimal_sum("111111", "10100"))  # 输出: '83'
    print(binary_to_decimal_sum("111010101001001011", "100010101001"))  # 输出: '242420'
    print(binary_to_decimal_sum("111010101001011", "10010101001"))  # 输出: '31220'
    print(binary_to_decimal_sum("11", "1"))  # 输出: '4'

测试样例解析

样例 1

输入: binary1 = "101", binary2 = "110"
  1. 转换为十进制:

    • binary1 = "101" 转换为十进制是 5
    • binary2 = "110" 转换为十进制是 6
  2. 求和:

    • 5 + 6 = 11
  3. 转换为字符串:

    • 返回 '11'

输出:"11"


样例 2

输入: binary1 = "111111", binary2 = "10100"
  1. 转换为十进制:

    • binary1 = "111111" 转换为十进制是 63
    • binary2 = "10100" 转换为十进制是 20
  2. 求和:

    • 63 + 20 = 83
  3. 转换为字符串:

    • 返回 '83'

输出:"83"


样例 3

输入: binary1 = "111010101001001011", binary2 = "100010101001"
  1. 转换为十进制:

    • binary1 = "111010101001001011" 转换为十进制是 240947
    • binary2 = "100010101001" 转换为十进制是 1473
  2. 求和:

    • 240947 + 1473 = 242420
  3. 转换为字符串:

    • 返回 '242420'

输出:"242420"


为什么选择这种方法?

  1. 直接转换法的优势

    • Python 提供了直接将二进制字符串转为整数的内置函数 int(),避免手动计算二进制数位的权重。
    • 例如,手动计算 101: 1×22+0×21+1×20=51 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 = 5 这种方法容易出错,而直接调用 int(binary, 2) 是最优解。
  2. 动态大数处理

    • 使用 Python 的整数类型,我们无需关心数值的长度限制。
  3. 效率

    • 复杂度为 O(n)O(n),已经满足题目的效率要求。

总结

本题主要考察对二进制数的操作能力以及 Python 大数处理的应用。通过使用 Python 的内置函数,我们可以高效且准确地解决问题,并满足时间复杂度的要求。