LeetCode 简单 -二进制求和(105)

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 1 和 0

示例 1:

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

思路:这种写法既巧妙又简洁,用了两个指针分别指向a和b的末尾,然后每次取出一个字符,
转为数字,若无法取出字符则按0处理,然后定义进位carry,初始化为0,将三者加起来,对2取余即为当前位的数字,
对2取商即为当前进位的值,记得最后还要判断下carry,如果为1的话,要在结果最前面加上一个1。
class Solution {
public:
    string addBinary(string a, string b) {
        string res="";
        int carry=0;
        int m=a.size()-1,n=b.size()-1;
        while(m>=0||n>=0)
        {
            int x=m>=0?a[m--]-'0':0;
            int y=n>=0?b[n--]-'0':0;
            int sum=x+y+carry;
            res=to_string(sum%2)+res;
            carry=sum/2;
        }
       return carry==1?"1"+res:res;
 
    }
};

 

posted @ 2019-04-03 20:07  小新猩  阅读(275)  评论(0编辑  收藏  举报