题目解析 二进制之和 | 豆包MarsCode AI刷题

91 阅读3分钟

二进制之和

问题描述

小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. 输入处理:我们接收两个二进制字符串 binary1binary2,这两个字符串表示二进制数,我们需要对其进行相加操作。
  2. 转换为十进制:在 Python 中,int() 函数可以很方便地将一个二进制字符串转换为十进制数,因此我们可以利用这个函数将两个二进制字符串分别转换为十进制整数。
  3. 求和并转换回二进制:得到两个十进制数后,我们直接将它们相加,然后再将结果转换为二进制字符串。注意,我们的返回结果需要是十进制字符串,因此我们可以直接使用 str() 将最终结果转换为字符串。
  4. 考虑到大数:由于 Python 的整数可以处理非常大的数字,因此不需要担心二进制数过长导致的溢出问题。

代码实现

def solution(binary1, binary2):
    decimal1 = int(binary1, 2)
    decimal2 = int(binary2, 2)
    result = decimal1 + decimal2
    return str(result)

if __name__ == "__main__":
    print(solution("101", "110") == "11")
    print(solution("111111", "10100") == "83")
    print(solution("111010101001001011", "100010101001") == "242420")
    print(solution("111010101001011", "10010101001") == "31220")
    print(solution("11", "1") == "4")

解释

  1. int(binary1, 2) :将二进制字符串 binary1 转换为十进制数。int() 函数的第二个参数 2 表示这是二进制数。
  2. int(binary2, 2) :同理,将 binary2 转换为十进制数。
  3. decimal1 + decimal2:得到两个十进制数的和。
  4. str(result) :将结果转换为字符串并返回。

复杂度分析

  • 时间复杂度:O(n) ,其中 n 是二进制字符串的长度,主要来源于二进制转十进制和字符串转换。
  • 空间复杂度:O(n) ,主要来源于存储输入和输出的字符串。