1. 程式人生 > >LeetCode:Add Binary(二進位制求和)

LeetCode:Add Binary(二進位制求和)

題目

Given two binary strings, return their sum (also a binary string).

The input strings are both non-empty and contains only characters 1 or 0.

Example1:

Input: a = "11", b = "1"
Output: "100"

Example2:

Input: a = "1010", b = "1011"
Output: "10101"

思路

按照筆算的思路,從最低位開始對a和b的數進行加法運算,難點在於進位的控制和最高位非零問題。

從最低位開始按位求和並加上進位值,結果除以2並求餘數,得到進位值和當前位上的值,使用insert將當前位上的值插入字串,直到達到較短字串的長度,然後單獨對較長字串的剩餘部分和進位值求和。

最後對得到的字串從最左邊定位第一個非零字元,返回非零字元之後的字串。

程式碼

class Solution {
public:
    string addBinary(string a, string b) {
        int sizea = a.size();
        int sizeb = b.size();

        string res;
        if
(sizea<sizeb) { string temp; temp=a; a=b; b=temp; int n=sizea; sizea=sizeb; sizeb=n; } int temp=0; int h=0; for(int i=0;i<sizeb;i++) { temp+=a[sizea-1-i]-'0'
+b[sizeb-1-i]-'0'; h = temp%2; temp = temp/2; res.insert(0,1,'0'+h); } for(int i=0;i<sizea-sizeb;i++) { temp+=a[sizea-sizeb-1-i]-'0'; h = temp%2; temp = temp/2; res.insert(0,1,'0'+h); } res.insert(0,1,'0'+temp); int sizer = res.size(); for(int i=0;i<sizer;i++) { if(res[i]!='0') { res=res.substr(i,sizer-i); return res; } } return "0"; } };