[Leetcode] Add Binary

来源:互联网 发布:数据标注是什么 编辑:程序博客网 时间:2024/05/29 16:29

题目:

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

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


思路:从后向前计算。尽量避免insert(0, "string")这样的操作,会重复分配内存。


class Solution {public:    string addBinary(string a, string b) {        int a_ptr = (int)a.size() - 1;        int b_ptr = (int)b.size() - 1;        int carry = 0;        string result((a_ptr > b_ptr ? a_ptr : b_ptr) + 1, '\0');        for (int i = (int)result.size() - 1; i >= 0; --i) {            int a_digit;            if (a_ptr < 0) {                a_digit = 0;            } else {                a_digit = a[a_ptr] - '0';                a_ptr--;            }            int b_digit;            if (b_ptr < 0) {                b_digit = 0;            } else {                b_digit = b[b_ptr] - '0';                b_ptr--;            }            result[i] = (a_digit + b_digit + carry) % 2 + '0';            carry = (a_digit + b_digit + carry) / 2;        }        if (carry > 0) {            result.insert(0, "1");        }        return result;    }};


总结:复杂度O(n),n为a和b中较长的串的长度。

0 0
原创粉丝点击