题目描述:
本题思路很简单,看看官方解法很快就能看懂,主要是官方解法中的C++解法中不等长字符相加的思路很清奇,代码很优雅。
C++版本:
#include
class Solution {
public:
string addBinary(string a, string b) {
string ans;
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
int n = max(a.size(), b.size()), carry = 0;
for (size_t i = 0; i < n; ++i) {
carry += i < a.size() ? (a[i] == '1') : 0;
carry += i < b.size() ? (b[i] == '1') : 0;
ans.push_back((carry % 2) ? '1' : '0');
carry /= 2;
}
if (carry) {
ans.push_back('1');
}
reverse(ans.begin(), ans.end());
return ans;
}
};
主要看这两行:
carry += i < a.size() ? (a[i] == '1') : 0;
carry += i < b.size() ? (b[i] == '1') : 0;
carry在这题是进位符,一般进位符我们都会求和之后再除进制数来得到,低位的求和结果也会单独保存。而这里carry一符两用,既当进位符又当求和变量,实在是妙!
并且代码使用了三目运算符以及bool与int相加的隐式转换!代码也很优雅!
下面也给出python版本的解法,只能说思路很暴力,代码还是那么pythonic(调函数)
class Solution:
def addBinary(self, a: str, b: str) -> str:
return '{:b}'.format(int(a,2)+int(b,2))
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)