考察的知识点:字符串;

解答方法分析:

  1. 声明一个空字符串,用于存储相加结果。
  2. 初始化进位 carry 为 0。
  3. 从右往左遍历二进制字符串 a 和 b,用指针 i 和 j 分别表示当前遍历位置。如果 a[i] 和 b[j] 都为 ‘1’,同时 carry 为 1,则当前位置结果为 ‘1’,carry 更新为 1。如果 a[i] 和 b[j] 其中一个为 ‘1’,另一个为 ‘0’,同时 carry 为 1,则当前位置结果为 ‘0’,carry 仍然为 1。如果 a[i] 和 b[j] 其中一个为 ‘1’,另一个为 ‘0’,同时 carry 为 0,或者 a[i] 和 b[j] 都为 ‘0’,carry 为 1,则当前位置结果为 ‘1’,carry 更新为 0。如果 a[i] 和 b[j] 都为 ‘0’,同时 carry 为 0,则当前位置结果为 ‘0’,carry 仍然为 0。
  4. 遍历完 a 和 b 后,如果 carry 为 1,则在结果字符串最左侧插入 ‘1’。
  5. 返回结果字符串。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param a string字符串
     * @param b string字符串
     * @return string字符串
     */
    string addBinary(string a, string b) {
        string ans;
        int m = a.size();
        int n = b.size();
        int carry = 0;
        int i = m - 1;
        int j = n - 1;
        while (i >= 0 || j >= 0) {
            int sum = carry;
            if (i >= 0) {
                sum += a[i--] - '0';
            }
            if (j >= 0) {
                sum += b[j--] - '0';
            }
            ans.insert(0, to_string(sum % 2));
            carry = sum / 2;
        }
        if (carry == 1) {
            ans.insert(0, "1");
        }
        return ans;
    }
};