知识点
模拟
思路
模拟加法的进位过程,翻转两个字符串,从前往后进行加法,同时维护一个进位carry。每一次把当前位记录到结果字符串中。
最后反转结果字符串即可。
时间复杂度
AC Code (c++)
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param a string字符串 * @param b string字符串 * @return string字符串 */ string addBinary(string a, string b) { reverse(a.begin(), a.end()); reverse(b.begin(), b.end()); string res; int i = 0, n = a.size(), m = b.size(); int carry = 0; while (i < n and i < m) { auto k = (a[i] - '0' + b[i] - '0' + carry); res.push_back('0' + (k & 1)); carry = k >> 1; i ++; } while (i < n) { auto k = (a[i] - '0' + carry); res.push_back('0' + (k & 1)); carry = k >> 1; i ++; } while (i < m) { auto k = (b[i] - '0' + carry); res.push_back('0' + (k & 1)); carry = k >> 1; i ++; } while (carry) { res.push_back('0' + (carry & 1)); carry >>= 1; } reverse(res.begin(), res.end()); return res; } };