LeetCode 67 Add Binary(バイナリ加算)(*)
翻訳
テキスト
ぶんせき
私は最初にこのアルゴリズムを書いて、機能を実現しましたが、テーマの意図に合わないです.
それから変えて、こんな頭の悪いコードを書いて、私は自分で酔っ払っていました......
ぐるっと回ってもとても簡潔なコードが見つからなかったので、とりあえずこうして・・・
, ( )。
,
a = "11"
b = "1"
"100".
テキスト
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
ぶんせき
私は最初にこのアルゴリズムを書いて、機能を実現しましたが、テーマの意図に合わないです.
int ctoi(char c) {
return (int)c - 48;
}
int pow2(int n) {
int sum = 1;
while ((n--) > 0)
sum *= 2;
return sum;
}
int btoi(string s) {
int sum = 0, len = s.size();
for (int i = 0; i < len; ++i) {
sum += ctoi(s[i]) * pow2(len - i - 1);
}
return sum;
}
string itob(int n) {
if (n == 0) return "0";
string s = "";
while (n >= 1) {
if (n % 2 == 1)
s += "1";
else s += "0";
n /= 2;
}
string newStr = "";
for (int i = s.size() - 1; i >= 0; i--)
newStr += s[i];
return newStr;
}
string addBinary(string a, string b) {
return itob(btoi(a) + btoi(b));
}
それから変えて、こんな頭の悪いコードを書いて、私は自分で酔っ払っていました......
string addBinary(string a, string b) {
if (a.size() < b.size()) swap(a, b);
int len1 = a.size(), len2 = b.size();
int comLen = len1 < len2 ? len1 : len2;
int pos = 0;
string str = "";
for (int index1 = len1 - 1, index2 = len2 - 1; index1 > len1 - comLen, index2 >= 0; index1--, index2--) {
if (pos == 0) {
if (a[index1] == '1' && b[index2] == '1') {
str += "0";
pos = 1;
}
else if (a[index1] == '0' && b[index2] == '0') {
str += "0";
}
else {
str += "1";
}
}
else if (pos == 1) {
if (a[index1] == '1' &&b[index2] == '1') {
str += "1";
pos = 1;
}
else if (a[index1] == '0' && b[index2] == '0') {
str += "1";
pos = 0;
}
else {
str += "0";
pos = 1;
}
}
}
for (int index = len1 - comLen-1; index >= 0; index--) {
if (pos == 0) {
if (a[index] == '1') {
str += "1";
}
else {
str += "0";
}
}
else if (pos == 1) {
if (a[index] == '1') {
str += "0";
pos = 1;
}
else {
str += "1";
pos = 0;
}
}
}
if (pos == 1) str += "1";
string newStr = "";
for (int i = str.size() - 1; i >= 0; i--)
newStr += str[i];
return newStr;
}
ぐるっと回ってもとても簡潔なコードが見つからなかったので、とりあえずこうして・・・