[LeetCode]67 二进制相加

来源:互联网 发布:软件测试 回归策略 编辑:程序博客网 时间:2024/06/02 16:15

Add Binary(二进制相加)

【难度:Easy】
Given two binary strings, return their sum (also a binary string).

For example,
a = “11”
b = “1”
Return “100”.

给定两个二进制数的字符串,以字符串形式返回他们的和。
如:
a = “11”
b = “1”
return “100”


解题思路

高精度加法的变型题,采用的方法是从字符串末尾开始相加,由于二进制加法的情况较少,因此可以针对不同的情况来采取措施。


c++代码如下:

class Solution {public:    string addBinary(string a, string b) {        if (a == "")            return b;        if (b == "")            return a;        int j = b.length()-1;        int i = a.length()-1;        char carry = '0';        string ans = "";        for (; i >= 0 && j >= 0; i--,j--) {            if (a[i] == '1' && b[j] == '1') {                ans = carry + ans;                carry = '1';            } else if (a[i] == '0' && b[j] == '0'){                ans = carry + ans;                carry = '0';            } else {                if (carry == '1') {                    ans = '0' + ans;                    carry = '1';                } else {                    ans = '1' + ans;                    carry = '0';                }            }        }        if (i >= 0) {            for (i; i >= 0; i--) {                if (carry == '1' && a[i] == '1') {                    ans = '0' + ans;                    carry = '1';                } else if (carry == '0') {                    ans = a[i] + ans;                } else {                    ans = carry + ans;                    carry = '0';                }            }        } else if (j >= 0) {            for (j; j >= 0; j--) {                if (carry == '1' && b[j] == '1') {                    ans = '0' + ans;                    carry = '1';                } else if (carry == '0') {                    ans = b[j] + ans;                } else {                    ans = carry + ans;                    carry = '0';                }            }        }        if (carry == '1')            ans = '1' + ans;        return ans;    }};
0 0
原创粉丝点击