Add Binary
2015-03-10 10:27 笨笨的老兔子 阅读(214) 评论(0) 收藏 举报做一个二进制数字加法器
按照正常思路进行加法即可,设定一个进位变量carry,然后进行模拟
class Solution {public:string addBinary(string longStr, string shortStr) {string res;if (longStr.size() < shortStr.size()){res = longStr;longStr = shortStr;shortStr = res;}res = longStr;int carry = 0, bit = 0;int i = shortStr.size() - 1, j = longStr.size() - 1;for (; i >= 0; i--, j--){bit = shortStr[i] + longStr[j] + carry -'0' - '0';switch (bit){case 0:carry = 0;break;case 1:res[j] = '1';carry = 0;break;case 2:res[j] = '0';carry = 1;break;case 3:res[j] = '1';carry = 1;break;default:break;}}while (carry != 0 && j>=0){bit = longStr[j] + carry - '0';switch (bit){case 1:res[j] = '1';carry = 0;break;case 2:res[j] = '0';carry = 1;j--;break;default:break;}}if (carry == 1){res = "1" + res;}return res;}};
在评论区看到一个简短的代码,我做了一些小优化,性能和以上代码一样都是6ms,但是很值得学习
class Solution{public:string addBinary(string a, string b){string s = "";int c = 0, i = a.size() - 1, j = b.size() - 1;while (i >= 0 || j >= 0 || c == 1){c += i >= 0 ? a[i--] - '0' : 0;c += j >= 0 ? b[j--] - '0' : 0;s = char((c & 1)+ '0') + s;c = c >> 1;}return s;}};
浙公网安备 33010602011771号