给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
说实话,一些简单提的思路反而要比困难题要好,因为困难题已经是算法思路都清晰了,靠已知堆起来的.
void reverseString(char* p){
char tmp;
int r = strlen(p)-1;
int l =0;
while(l<r){
tmp = p[l];
p[l]=p[r];
p[r]=tmp;
l++;
r--;
}
}
char* addBinary(char* a, char* b) {
reverseString(a);
reverseString(b);
int len_a = strlen(a), len_b = strlen(b);
int n = fmax(len_a, len_b), carry = 0, len = 0;
char* ans = (char*)malloc(sizeof(char) * (n + 2));
for (int i = 0; i < n; ++i) {
carry += i < len_a ? (a[i] == '1') : 0;
carry += i < len_b ? (b[i] == '1') : 0;
ans[len++] = carry % 2 + '0';
carry /= 2;
}
if (carry) {
ans[len++] = '1';
}
ans[len] = '\0';
reverseString(ans);
return ans;
}