首页 > 其他 > 详细

【Leetcode】Add Binary

时间:2014-03-24 20:32:19      阅读:521      评论:0      收藏:0      [点我收藏+]

题目:

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".

解题思路1:判断当前字符所表示的数字,产生输出和进位。缺点:程序比较复杂。


代码1:

class Solution {
public:
    string addBinary(string a, string b) {
        char carry=‘0‘;
        string c;
        if(a.empty())return b;
        if(b.empty())return a;
        string::iterator itr_a=a.end()-1;
        string::iterator itr_b=b.end()-1;
        while(itr_a>=a.begin()&&itr_b>=b.begin()){
            if(*itr_a==‘0‘&&*itr_b==‘0‘){
                if(carry==‘0‘){
                    c.insert(c.begin(),‘0‘);
                }else if(carry==‘1‘){
                    c.insert(c.begin(),‘1‘);
                    carry=‘0‘;
                }
                itr_a--;itr_b--;
                continue;
            }
            if(*itr_a==‘0‘&&*itr_b==‘1‘){
                if(carry==‘0‘){
                    c.insert(c.begin(),‘1‘);
                }else if(carry==‘1‘){
                    c.insert(c.begin(),‘0‘);
                    carry=‘1‘;
                }
                itr_a--;itr_b--;
                continue;
            }
            if(*itr_a==‘1‘&&*itr_b==‘0‘){
                if(carry==‘0‘){
                    c.insert(c.begin(),‘1‘);
                }else if(carry==‘1‘){
                    c.insert(c.begin(),‘0‘);
                    carry=‘1‘;
                }
                itr_a--;itr_b--;
                continue;
            }
            if(*itr_a==‘1‘&&*itr_b==‘1‘){
                if(carry==‘0‘){
                    c.insert(c.begin(),‘0‘);
                    carry=‘1‘;
                }else if(carry==‘1‘){
                    c.insert(c.begin(),‘1‘);
                    carry=‘1‘;
                }
                itr_a--;itr_b--;
                continue;
            }
        }
        while(itr_a>=a.begin()){
            if(carry==‘0‘){
                c.insert(c.begin(),a.begin(),itr_a+1);
                break;
            }
            if(*itr_a==‘0‘&&carry==‘1‘){
                c.insert(c.begin(),‘1‘);
                carry=‘0‘;
                itr_a--;
                continue;
            }
            if(*itr_a==‘1‘&&carry==‘1‘){
                c.insert(c.begin(),‘0‘);
                carry=‘1‘;
                itr_a--;
                continue;
            }
        }
        while(itr_b>=b.begin()){
            if(carry==‘0‘){
                c.insert(c.begin(),b.begin(),itr_b+1);
                break;
            }
            if(*itr_b==‘0‘&&carry==‘1‘){
                c.insert(c.begin(),‘1‘);
                carry=‘0‘;
                itr_b--;
                continue;
            }
            if(*itr_b==‘1‘&&carry==‘1‘){
                c.insert(c.begin(),‘0‘);
                carry=‘1‘;
                itr_b--;
                continue;
            }
        }
        if(carry==‘1‘){
            c.insert(c.begin(),‘1‘);
        }
        return c;
    }
};

解题思路2:首先判断a和b的长度,取其中更长的size作为加法运算的次数。在加法运算时,将每一个char转化为int型数字进行运算并记录进位。优点:程序简单。


代码2:

class Solution {
public:
    string addBinary(string a, string b) {
        int carry=0;
        string c;
        if(a.empty())return b;
        if(b.empty())return a;
        const size_t n=max(a.size(),b.size());
        for(int i=0;i<n;i++){
            int val_a=i<a.size()?a[a.size()-1-i]-‘0‘:0;
            int val_b=i<b.size()?b[b.size()-1-i]-‘0‘:0;
            int val_c=(val_a+val_b+carry)%2;
            carry=(val_a+val_b+carry)/2;
            c.insert(c.begin(),val_c+‘0‘);
        }
        if(carry==1){
            c.insert(c.begin(),‘1‘);
        }
        return c;
    }
};


【Leetcode】Add Binary,布布扣,bubuko.com

【Leetcode】Add Binary

原文:http://blog.csdn.net/ussam/article/details/21963717

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!