leetcode第一刷_Add Binary

来源:互联网 发布:samba 软件 编辑:程序博客网 时间:2024/06/04 19:02

二进制相加,本质上就是大整数加法,有关大整数加法我的舍友教过我一个很好的方法,先用一个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;    }};

0 0