皮卡丘python写leetcode_Day8

       ·67二进制求和

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

 

示例 1:

输入:a = "11", b = "1"
输出:"100"
示例 2:

输入:a = "1010", b = "1011"
输出:"10101"

·解题思路

1.先补齐,使用函数list.rjust(length,num)——表示右对齐,左补0

2.从高位往低位遍历,运算结果是last = (int(a[i]) + int(b[i]) + carry) %2 , 相加结果对2取余作为留下的余数。进位数为,carry= (int(a[i]) + int(b[i]) + carry) // 2,  相加结果整除2作为进位位

3.若是遍历到最后还有进位位,那么进位数放在last结果的最前边,用insert()函数,插入

·代码

class Solution(object):
    def addBinary(self, a, b):
        def addzereo(a,b):
            a_size = len(a)
            b_size = len(b)
            max = a_size if a_size >= b_size else b_size
            a = a.rjust(max, '0')
            b = b.rjust(max, '0')
            return a,b

        def convert_to_num(lst):
            num_str = ''.join(str(digit) for digit in lst)
            num_str = str(num_str)
            return num_str

        a,b = addzereo(a,b)
        last = []
        carry = 0
        for i in range(len(a) -1 ,-1, -1):
            digit_num = int(a[i]) + int(b[i]) +carry
            last.insert(0, digit_num % 2)
            carry = digit_num // 2

        if carry :
            last.insert(0,carry)

        result = convert_to_num(last)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值