Description:
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
就是二进制加法
自己的代码:
class Solution {
public:
string addBinary(string a, string b) {
string carry = "0";
string result = "";
int i = a.size() - 1;
int j = b.size() - 1;
int length = 0;
while (i >= 0 && j >= 0) {
if (a[i] == b[j]) {
if (a[i] == '0') {
if (carry == "0") {
result.insert(0, "0");
i--; j--;
carry = "0";
}
else {
result.insert(0, "1");
i--; j--;
carry = "0";
}
}
else if (a[i] == '1') {
if (carry == "0") {
result.insert(0, "0");
i--; j--;
carry = "1";
}
else {
result.insert(0, "1");
i--; j--;
carry = "1";
}
}
}
else if (a[i] != b[j]) {
if (carry == "0") {
result.insert(0, "1");
i--; j--;
carry = "0";
}
else if (carry == "1") {
result.insert(0, "0");
i--; j--;
carry = "1";
}
}
}
string tem;
if (i >= 0) {
while (i >= 0) {
tem = a[i];
if (carry == "0") {
result.insert(0, tem);
}
else if(carry == "1") {
if (a[i] == '1') {
result.insert(0, "0");
carry = "1";
}
else if (a[i] == '0') {
result.insert(0, "1");
carry = "0";
}
}
i--;
}
}
else if(j >= 0) {
while (j >= 0) {
tem = b[j];
if (carry == "0") {
result.insert(0, tem);
}
else if (carry == "1") {
if (b[j] == '1') {
result.insert(0, "0");
carry = "1";
}
else if (b[j] == '0') {
result.insert(0, "1");
carry = "0";
}
}
j--;
}
}
if (carry == "1")
result.insert(0, "1");
return result;
}
};
自己的想法就是比较字符串,代码写的比较啰嗦,去讨论区看到了人家的代码,很简洁,他们的做法就是把字符减去‘0’,变成数字0或1,数字相加的结果对2取余。描述的不太清楚,直接上代码
class Solution {
public:
string addBinary(string a, string b) {
int i = a.length() - 1;
int j = b.length() - 1;
string res;
int carry = 0;
while(i >= 0 || j >= 0 || carry > 0) {
if(i >= 0) {
carry += a[i] - '0';//直接得到int型的变量
i -= 1;
}
if(j >= 0) {
carry += b[j] - '0';
j -= 1;
}
res += (carry % 2) + '0';//carry对2取余就是结果
carry /= 2;//除以2就得到了进位
}
reverse(res.begin(), res.end());//最后的结果倒一下
return res;
}
};
写的很简洁,想法也很好,将字符变成数字。lz继续努力,太渣渣了。。。。。。