题解 | #牛群的编码#
牛群的编码
https://www.nowcoder.com/practice/fd18eec140244f31ac817757a54b4a39
考察的知识点:字符串;
解答方法分析:
- 声明一个空字符串,用于存储相加结果。
- 初始化进位 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;
}
};

查看14道真题和解析