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

43 阅读2分钟

一、二进制之和问题

问题描述

小U和小R喜欢探索二进制数字的奥秘。他们想找到一个方法,将两个二进制字符串相加并以十进制的形式呈现。这个过程需要注意的是,他们的二进制串可能非常长,所以常规的方法可能无法处理大数。小U和小R希望你帮助他们设计一个算法,该算法能在保证时间复杂度不超过O(n^2)的前提下,返回两个二进制字符串的十进制求和结果。

测试样例

样例1:

微信图片_20241114221343.png

样例2:

微信图片_20241114221440.png

样例3:

微信图片_20241114221614.png

样例4:

微信图片_20241114221617.png

样例5:

微信图片_20241114221620.png

二、解题思路

将进制字符串相加并用十进制形式输出。可以先将二进制字符串按位相加后再进行十进制的转换

具体步骤

1、二进制加法

1)首先对两个二进制字符串进行相加操作,从最低位开始,依次向前处理每一位。 2)然后定义一个初始化为零的变量来记录进位情况。当两个当前位的数字相加的结果大于等于2时,就会进位,然后更新进位变量的值,并将当前位的结果对2取余数作为实际结果。 3)当处理完二进制字符串的所有位。其中一个二进制字符串已经处理完而另一个还有剩余的位,就继续处理剩余的位,如果有进位的话将其与进位相加。

2、二进制转十进制

1)从二进制字符串最低位开始,每一位乘以2的相应次幂,然后将所有乘积相加,就得到了十进制数

三、solution函数

经过以上步骤分析可以得出以下函数

微信图片_20241114223021.png

四、示例演示

我们可以带入题中的式子来验证一下代码的正确性。其中binary1 = '101',binary2 = '110',以下用b1和b2来代称 1)从最低位开始,b1的最低位是1,b2的最低位是0,进位初始位是0。所以相加的结果是1 + 0 + 0 = 1,进位依然为0。b1第二位是0,b2第二位是1,相加0 + 1 + 0 = 1,进位还是0.b1最高位1,b2最高位1,相加1 + 1 + 0 = 10,进位为1。最终得到二进制结果为1011。 2)对于二进制字符串1011,从低到高位依次为1,1,0,1,运算可得1 * 1 + 2 * 1 + 0 * 4 + 1 * 8 = 1 + 2 + 0 + 8 = 11,即最终答案为11。