LeetCode67题——二进制求和

67.二进制求和

  • 方法一

    • 将a和b两个字符串分别转化为十进制(这里使用a[-i],使其倒序遍历,pow()函数则是求得2的i-1次方),然后相加,把结果存储在x中;m,n=divmod(x,2)函数是m=x/2,n=x%2,然后把余数n倒着串起来,即所要的结果。
      class Solution:
     def addBinary(self, a: str, b: str) -> str:
         if a=='0' and b=='0':
             return '0'
         else:
             x=0
             for i in range(1,len(a)+1):
                 x+=int(a[-i])*pow(2,i-1)
             for i in range(1,len(b)+1):
                 x+=int(b[-i])*pow(2,i-1)
             y=''
             while x>0:
                 x,z=divmod(x,2)
                 y=str(z)+y
             return y`
    
  • 方法二:

  •  借鉴了别人的方法然后再pycharm上进行了调试输出,代码如下:
    

```python
a:str = input("输入a:")
b:str = input("输入b:")
if len(a)<len(b):
    a,b=b,a
a=list(a)
for i in range(-1,-len(b)-1,-1):
    if b[i]=='1':
        if a[i]=='1':

            k=i
            while(a[k])=='1':
                a[k]='0'
                k-=1
                if k== -len(a)-1:
                    a.insert(0,'0')
                    break
            a[k]='1'
        else:
            a[i]='1'
print(''.join(a))

这里认为a比b长,将a 转化为列表,对b从右向左遍历,如果b[i]的值不是1,就不需要进位,如果是1 ,则考虑进位问题,其中还有一个由进位产生多出一位的情况,则在最前面插入一个‘0’
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值