一、二进制之和问题
问题描述
小U和小R喜欢探索二进制数字的奥秘。他们想找到一个方法,将两个二进制字符串相加并以十进制的形式呈现。这个过程需要注意的是,他们的二进制串可能非常长,所以常规的方法可能无法处理大数。小U和小R希望你帮助他们设计一个算法,该算法能在保证时间复杂度不超过O(n^2)的前提下,返回两个二进制字符串的十进制求和结果。
测试样例
样例1:
样例2:
样例3:
样例4:
样例5:
二、解题思路
将进制字符串相加并用十进制形式输出。可以先将二进制字符串按位相加后再进行十进制的转换
具体步骤
1、二进制加法
1)首先对两个二进制字符串进行相加操作,从最低位开始,依次向前处理每一位。 2)然后定义一个初始化为零的变量来记录进位情况。当两个当前位的数字相加的结果大于等于2时,就会进位,然后更新进位变量的值,并将当前位的结果对2取余数作为实际结果。 3)当处理完二进制字符串的所有位。其中一个二进制字符串已经处理完而另一个还有剩余的位,就继续处理剩余的位,如果有进位的话将其与进位相加。
2、二进制转十进制
1)从二进制字符串最低位开始,每一位乘以2的相应次幂,然后将所有乘积相加,就得到了十进制数
三、solution函数
经过以上步骤分析可以得出以下函数
四、示例演示
我们可以带入题中的式子来验证一下代码的正确性。其中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。