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

139 阅读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. 理解二进制加法规则:二进制加法遵循与十进制相似的规则,但每一位的和只可能是0、1或2。当和为2时,需要进位。
  2. 逐位相加:从两个二进制字符串的最低位(最右边)开始,逐位相加。
  3. 处理进位:如果某一位的和大于等于2,则需要向高一位进位。
  4. 字符串对齐:由于两个二进制字符串的长度可能不同,需要在较短的字符串前面补零,以便对齐。
  5. 转换为十进制:将最终的二进制结果转换为十进制数字。

程序设计

def solution(binary1, binary2):
    # 将两个二进制字符串转换为整数
    num1 = int(binary1, 2)
    num2 = int(binary2, 2)
    
    # 计算两个整数的和
    total = num1 + num2
    
    # 将和转换回二进制字符串,并去掉前缀'0b'
    binary_sum = bin(total)[2:]
    
    # 返回二进制和的十进制表示
    return str(int(binary_sum, 2))

if __name__ == "__main__":
    #  You can add more test cases here
    print(solution("101", "110") == "11")
    print(solution("111111", "10100") == "83")
    print(solution("111010101001001011", "100010101001") == "242420")
    print(solution("111010101001011", "10010101001") == "31220")

函数设计思路

  1. 二进制字符串转整数

    • 使用 int(binary1, 2) 和 int(binary2, 2) 将两个二进制字符串转换为十进制整数 num1 和 num2。这里的 2 表示输入字符串是二进制形式的。
  2. 计算整数的和

    • 通过 total = num1 + num2 计算两个十进制整数的和。
  3. 整数和转二进制字符串

    • 使用 bin(total)[2:] 将计算得到的和转换回二进制字符串,并去掉Python中二进制表示的前缀 '0b'
  4. 二进制字符串转十进制表示

    • 最后,使用 str(int(binary_sum, 2)) 将二进制字符串再次转换为十进制表示,并以字符串形式返回。

结果

8db18889be61ef08dd3d395546ca515.png