67. 二进制求和

67. 二进制求和,第1张

题目描述:

 

本题思路很简单,看看官方解法很快就能看懂,主要是官方解法中的C++解法中不等长字符相加的思路很清奇,代码很优雅。

C++版本:

#include

class Solution {
public:
    string addBinary(string a, string b) {
        string ans;
        reverse(a.begin(), a.end());
        reverse(b.begin(), b.end());

        int n = max(a.size(), b.size()), carry = 0;
        for (size_t i = 0; i < n; ++i) {
            carry += i < a.size() ? (a[i] == '1') : 0;
            carry += i < b.size() ? (b[i] == '1') : 0;
            ans.push_back((carry % 2) ? '1' : '0');
            carry /= 2;
        }

        if (carry) {
            ans.push_back('1');
        }
        reverse(ans.begin(), ans.end());

        return ans;
    }
};

主要看这两行:

carry += i < a.size() ? (a[i] == '1') : 0;
carry += i < b.size() ? (b[i] == '1') : 0;

carry在这题是进位符,一般进位符我们都会求和之后再除进制数来得到,低位的求和结果也会单独保存。而这里carry一符两用,既当进位符又当求和变量,实在是妙!

并且代码使用了三目运算符以及bool与int相加的隐式转换!代码也很优雅!

下面也给出python版本的解法,只能说思路很暴力,代码还是那么pythonic(调函数)

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        return '{:b}'.format(int(a,2)+int(b,2))

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/3002299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存