1. 程式人生 > >LeetCode 67 Add Binary(二進制相加)(*)

LeetCode 67 Add Binary(二進制相加)(*)

ron string class ide 字符串 字符 dbi binary 目的

翻譯

給定兩個二進制字符串,返回它們的和(也是二進制字符串)。

比如,
a = "11"
b = "1"
返回 "100".

原文

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

For example,
a = "11"
b = "1"
Return "100".

分析

我一開始寫了這個算法,盡管實現了功能,只是不符合題目的用意。

int ctoi(char c) {
    return (int)c - 48;
}

int pow2(int n) {
    int
sum = 1; while ((n--) > 0) sum *= 2; return sum; } int btoi(string s) { int sum = 0, len = s.size(); for (int i = 0; i < len; ++i) { sum += ctoi(s[i]) * pow2(len - i - 1); } return sum; } string itob(int n) { if (n == 0) return "0"; string s = ""; while
(n >= 1) { if (n % 2 == 1) s += "1"; else s += "0"; n /= 2; } string newStr = ""; for (int i = s.size() - 1; i >= 0; i--) newStr += s[i]; return newStr; } string addBinary(string a, string b) { return itob(btoi(a) + btoi(b)); }

然後改了改,寫出這麽腦殘的代碼我自己都醉了……

string addBinary(string a, string b) {
    if (a.size() < b.size()) swap(a, b);
    int len1 = a.size(), len2 = b.size();
    int comLen = len1 < len2 ? len1 : len2;
    int pos = 0;
    string str = "";
    for (int index1 = len1 - 1, index2 = len2 - 1; index1 > len1 - comLen, index2 >= 0; index1--, index2--) {
        if (pos == 0) {
            if (a[index1] == ‘1‘ && b[index2] == ‘1‘) {
                str += "0";
                pos = 1;
            }
            else if (a[index1] == ‘0‘ && b[index2] == ‘0‘) {
                str += "0";
            }
            else {
                str += "1";
            }
        }
        else if (pos == 1) {
            if (a[index1] == ‘1‘ &&b[index2] == ‘1‘) {
                str += "1";
                pos = 1;
            }
            else if (a[index1] == ‘0‘ && b[index2] == ‘0‘) {
                str += "1";
                pos = 0;
            }
            else {
                str += "0";
                pos = 1;
            }
        }
    }

    for (int index = len1 - comLen-1; index >= 0; index--) {
        if (pos == 0) {
            if (a[index] == ‘1‘) {
                str += "1";
            }
            else {
                str += "0";
            }
        }
        else if (pos == 1) {
            if (a[index] == ‘1‘) {
                str += "0";
                pos = 1;
            }
            else {
                str += "1";
                pos = 0;
            }
        }
    }
    if (pos == 1) str += "1";
    string newStr = "";
    for (int i = str.size() - 1; i >= 0; i--)
        newStr += str[i];
    return newStr;
}

轉了一圈也沒發現很簡潔的代碼,那就先這樣了……

LeetCode 67 Add Binary(二進制相加)(*)