LeetCodeキャベツノート[16]:Add Binary


LeetCodeキャベツノート[16]:Add Binary


67. Add Binary [easy]


タイトル:
Given two binary strings, return their sum (also a binary string).
For example, a = "11" b = "1" Return "100" .
2つのバイナリ数を表すstringが加算され、結果はstringで返され、codeは以下のようになります.
class Solution(object):
    def addBinary(self, a, b):
        """
        :type a: str
        :type b: str
        :rtype: str
        """
        carry = 0
        summ = ''
        if len(a) > len(b):
            lg = a
            st = b
        else:
            lg = b
            st = a
        for i in range(1,len(lg)+1):
            if i <= len(st):
                summ = str(int(lg[-i]) ^ int(st[-i]) ^ carry) + summ
                carry = int(int(lg[-i]) + int(st[-i]) + carry > 1)
            else:
                if i <= len(lg):
                    summ = str(int(lg[-i]) ^ carry) + summ
                    carry = int(int(lg[-i]) + carry > 1)
        if carry == 0:
            return summ
        else:
            return '1' + summ

まずポインタを長シーケンスと短シーケンスにそれぞれ指し、両方のシーケンスに値がある場合、各ビットはai+bi+carry、1つの値がある場合はai+carry、aiは長シーケンスの要素です.最後に戻るときはキャリーがあるかどうか見て、ある場合は「1」を添えて、ない場合はそのまま戻ります.
62ms,14.46%
discussで面白いものを見ました
class Solution:
    def addBinary(self, a, b):
        return bin(eval('0b' + a) + eval('0b' + b))[2:]

巧みにタイプ変換関数binを用いて,和を求めた整数をbinaryの文字列出力に変換し,和を求める過程はevalを直接10進数に変換した.でもpython内蔵の関数を使いすぎたような気がします.の実用的ですが、アルゴリズム問題としての答えが合っているかどうかはわかりません.
またpythonでの異或実用^という先端的な表現はxorではありません.注意が必要です.
2018年2月9日23:52:56
もうすぐ12時だよ~