一、前记(3/3)

嘿嘿!非常不好意思,这一篇算法咕咕了一天,还好今天有认真的做人。因为最近有好多的聚会(外公过86岁生日)和比赛(WMCTF),所以这一篇blog在上个星期就没有来得及写。这个星期要好好做人了,上个星期过的太快乐了。争取留下时间可以和女朋友去一趟重庆耍。

二、题目描述

三、解题思路

1、我的思路

我的思路比较取巧,应该算是懒人专属。二进制转十进制的过程就不必叙述了,不难,不会的可以上网去百度一下。首先第一步:就是先将索引顺序转换成正确的运算顺序[::-1]。第二步:将字符串二进制转换成十进制。第三步:相加得到十进制和。第四步:将十进制转换成二进制再转换成字符串。

#encoding:utf-8
class Solution:
    def addBinary(self, a: str, b: str) -> str:
        i=0
        x_a=0
        x_b=0
        reverse_a=a[::-1]
        reverse_b=b[::-1]
        print("this is reverse_a==",reverse_a)
        print("this is reverse_b==",reverse_b)

        for i in range(len(a)):
            x_a=2**i*int(reverse_a[i])+x_a
        print("this is int_a==",x_a)

        for j in range(len(b)):
            x_b=2**j*int(reverse_b[j])+x_b
        print("this is int_b==",x_b)

        int_sum=int(x_a)+int(x_b)
        print("this is int_sum==",int_sum)
        return str(bin(int_sum))[2:]
#as a checking
solution=Solution()
a='1010'
b='1011'
print(solution.addBinary(a,b))

2、别人的思路

(1)、其实别人的思路还是挺肝的,直接二进制求和。也就三种情况:0+0=0;1+0=1;1+1=0;分别列举一下就好。

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        if a == '': return b
        if b == '': return a
        if a[-1] == '1' and b[-1] == '1':
            return self.addBinary(self.addBinary(a[:-1],b[:-1]),'1')+'0'
        elif a[-1] == '0' and b[-1] == '0':
            return self.addBinary(a[:-1],b[:-1])+'0'
        else:
            return self.addBinary(a[:-1],b[:-1])+'1'

(2)、我还看到一个小火汁,他直接两个字符串比较(真正的肝帝)

class Solution:
    def addBinary(self, a: str, b: str) -> str:

        p1, p2 = len(a) - 1, len(b) - 1
        res = ''
        carray = 0
        while 0 <= p1 and 0 <= p2:
            if a[p1] == '1' and b[p2] == '1':
                if carray:
                    res += '1'
                    carray = 1
                else:
                    res += '0'
                    carray = 1
            elif a[p1] == '1' or b[p2] == '1':
                if carray:
                    res += '0'
                    carray = 1
                else:
                    res += '1'
                    carray = 0
            else:
                if carray:
                    res += '1'
                    carray = 0
                else:
                    res += '0'
                    carray = 0
            p1 -= 1
            p2 -= 1

        if p1 == -1 and p2 == -1:
            if carray:
                res += '1'  
        elif p1 == -1 and p2 != -1:
            while 0 <= p2:
                if b[p2] == '1':
                    if carray:
                        res += '0'
                        carray = 1
                    else:
                        res +=  '1'
                        carray = 0
                else:
                    if carray:
                        res += '1'
                        carray = 0
                    else:
                        res += '0'
                        
                p2 -= 1
            if carray:
                res += '1'
        elif p1 != -1 and p2 == -1:

            while 0 <= p1:
                if a[p1] == '1':
                    if carray:
                        res += '0'
                        carray = 1
                    else:
                        res +=  '1'
                        carray = 0
                else:
                    if carray:
                        res += '1'
                        carray = 0
                    else:
                        res += '0'
                p1 -= 1
            if carray:
                res += '1'
        res = list(res)

四、学到了什么?

学到了不同的思路。