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

48 阅读4分钟

问题描述

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

思路分析

二进制转十进制:首先将两个二进制字符串转换为十进制整数。 相加:将两个十进制整数相加。 返回结果:将相加的结果转换为字符串形式返回

代码演示(以PYthon编写)

def solution(binary1, binary2):

    # 将二进制字符串转换为十进制整数
    decimal1 = int(binary1, 2)
    decimal2 = int(binary2, 2)
    #相加两个十进制整数
    result_decimal = decimal1 + decimal2
    #将结果转换为字符串形式返回
    return str(result_decimal)

if __name__ == "__main__":
    # 你可以添加更多测试用例
    print(solution("101", "110") == "11")
    print(solution("111111", "10100") == "83")
    print(solution("111010101001001011", "100010101001") == "242420")
    print(solution("111010101001011", "10010101001") == "31220")

关键步骤解释

int(binary1, 2):将二进制字符串 binary1 转换为十进制整数。

decimal1 + decimal2:将两个十进制整数相加。

str(result_decimal):将相加的结果转换为字符串形式返回。

可能出现的问题 :如何处理二进制字符串的长度不一致的情况?

处理二进制字符串长度不一致的情况可以通过在较短的字符串前面补零来实现。这样两个字符串的长度就会一致,便于后续的相加操作。

解题思路 补零:如果两个二进制字符串的长度不一致,在较短的字符串前面补零,使其长度与较长的字符串一致。 二进制转十进制:将补零后的二进制字符串转换为十进制整数。 相加:将两个十进制整数相加。 返回结果:将相加的结果转换为字符串形式返回

代码提示

def solution(binary1, binary2):

    # 补零操作,使两个二进制字符串长度一致
    max_len = max(len(binary1), len(binary2))
    binary1 = binary1.zfill(max_len)
    binary2 = binary2.zfill(max_len)

    # 将二进制字符串转换为十进制整数
    decimal1 = int(binary1, 2)
    decimal2 = int(binary2, 2)

    # 相加两个十进制整数
    result_decimal = decimal1 + decimal2

    # 将结果转换为字符串形式返回
    return str(result_decimal)
if __name__ == "__main__":
    # 你可以添加更多测试用例
    print(solution("101", "110") == "11")
    print(solution("111111", "10100") == "83")
    print(solution("111010101001001011", "100010101001") == "242420")
    print(solution("111010101001011", "10010101001") == "31220")

关键步骤解释

**max_len = max(len(binary1), len(binary2))**:找到两个二进制字符串的最大长度。
**binary1.zfill(max_len)**:在 binary1 前面补零,使其长度与 max_len 一致。
**binary2.zfill(max_len)**:在 binary2 前面补零,使其长度与 max_len 一致。
**int(binary1, 2)**:将补零后的二进制字符串 binary1 转换为十进制整数。
**int(binary2, 2)**:将补零后的二进制字符串 binary2 转换为十进制整数。
**decimal1 + decimal2**:将两个十进制整数相加。
**str(result_decimal)**:将相加的结果转换为字符串形式返回。

总结

本题考查了人们对二进制的掌握能力,难度适中。