二进制相加,本质上就是大整数加法,有关大整数加法我的舍友教过我一个很好的方法,先用一个int数组保存结果,将两个数对应位置相加,全部加完后,再统一处理进位的问题。这个方法同样适用于大整数的乘法。
这个题没什么特别的,注意一下进位别搞错了就行了,还有其实不用像我写的这么麻烦,可以一开始先判断哪个更长一些,交换一下。代码会简洁很多。
class Solution { public: string addBinary(string a, string b) { int l1 = a.length(), l2 = b.length(); string c(max(l1, l2)+1, ‘0‘); int i1 = l1-1, i2 = l2-1, ch=0, k = max(l1, l2); while(i1>=0&&i2>=0){ if(a[i1] == ‘1‘ && b[i2] == ‘1‘){ c[k--] = ch+‘0‘; ch = 1; }else if(a[i1]==‘1‘||b[i2]==‘1‘){ if(ch){ c[k--] = ‘0‘; }else{ c[k--] = ‘1‘; } }else{ c[k--] = ‘0‘+ch; ch = 0; } i1--; i2--; } while(i1>=0){ if(ch){ if(a[i1] == ‘1‘){ c[k--] = ‘0‘; ch = 1; }else{ c[k--] = ‘1‘; ch = 0; } }else{ c[k--] = a[i1]; } i1--; } while(i2>=0){ if(ch){ if(b[i2] == ‘1‘){ c[k--] = ‘0‘; ch = 1; }else{ c[k--] = ‘1‘; ch = 0; } }else{ c[k--] = b[i2]; } i2--; } if(ch) c[0] = ‘1‘; if(c[0] == ‘0‘) c = c.substr(1, c.length()-1); return c; } };
leetcode第一刷_Add Binary,布布扣,bubuko.com
原文地址:http://blog.csdn.net/u012792219/article/details/25607491