本文主要是介绍LeetCode 67 Add Binary,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:
两个二进制数相加,输出结果
思路:
各种模拟均可,比如先把A和B倒过来,再按位相加,最后把结果再倒回来。
不过为了快,我是这样做的——假设A比B长,那么我对位相加B的长度。这时如果没有进位,那么A长出B的部分就不会变了;如果有进位,那么继续往A的高位加,直到某一次进位为0,那么更高位的A就不变了;如果直到最后还有进位,那就最前面添加一个最高位1。
代码:
class Solution {
public:string addBinary(string a, string b) {if (a.size() < b.size()) {swap(a, b);}int i = a.size() - 1;int j = b.size() - 1;stringstream ss;int add = 0;while (j >= 0) {add += a[i] + b[j] - '0' - '0';--i;--j;ss << (add & 1);add >>= 1;}while (add && i >= 0) {add += a[i] - '0';--i;ss << (add & 1);add >>= 1;}if (add > 0) {ss << add;string ans = ss.str();reverse(ans.begin(), ans.end());return ans;}string ans = ss.str();reverse(ans.begin(), ans.end());return a.substr(0, i + 1) + ans;}
};
这篇关于LeetCode 67 Add Binary的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!