考察的知识点:字符串;
解答方法分析:
- 声明一个空字符串,用于存储相加结果。
- 初始化进位 carry 为 0。
- 从右往左遍历二进制字符串 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。
- 遍历完 a 和 b 后,如果 carry 为 1,则在结果字符串最左侧插入 ‘1’。
- 返回结果字符串。
所用编程语言: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; } };