您的位置:首页 > 其它

LeetCode(65)Add Binary

2014-01-23 03:55 344 查看
题目如下:

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

For example,

a = "11"

b = "1"

Return "100".

分析如下:

按照从低位到高位的顺序逐个处理每个数字,分别看是0+0,还是0+1, 还是1+0,还是1+1,再看有没有前一次运算的进位。比较容易出bug的地方是,进位要记得更新。

我的代码:

//44ms 
class Solution {
public:
    string addBinary(string a, string b) {
        int len_a=(int)a.size();
        int len_b=(int)b.size();
        if(len_a==0&&len_b==0)
            return "0";
        string added="0";
        string res="";
        len_a--;
        len_b--;
        while((len_a>=0)&&(len_b>=0)){
            if(((a[len_a]-'0')==0)&&((b[len_b]-'0')==0)){ //bug1 字符串比较写错了,注意a[i]是char型的
                if(added=="0")
                    res="0"+res;
                else{
                    res="1"+res;
                    added="0"; //bug2 少写了这句话,更新进位变量added的取值
                }
            } else if(  ( ( (a[len_a]-'0')==0) && ( (b[len_b]-'1')==0) ) || (  (  (a[len_a]-'1')==0)&&( (b[len_b]-'0')==0 ) )  ) {
                if(added=="0"){
                    res="1"+res;
                }else{
                    res="0"+res;
                    added="1";
                }
            }else{
                if(added=="0"){
                    res="0"+res;
                    added="1";
                } else {
                    res="1"+res;
                    added="1";
                }
            }
            len_a--;
            len_b--;
        }
        while(len_a>=0){
            if(added=="0")
                res=a[len_a]+res;
            else{
                if((a[len_a]-'0')==0){
                    res="1"+res;
                    added="0"; //bug3 少写了这句话,更新进位变量added的取值
                }else{
                    res="0"+res;
                    added="1";
                }
            }
            len_a--;
        }
        
        while(len_b>=0){
            if(added=="0")
                res=b[len_b]+res;
            else{
                if((b[len_b]-'0')==0){
                    res="1"+res;
                    added="0";
                } else {
                    res="0"+res;
                    added="1";
                }
            }
            len_b--;
        }
        if(added=="1")
            res=added+res;
        return res;
    }
};


update: 2014-12-10

简化了代码。思路和Leetcoe 这道题目 Add Two Numbers一模一样.

class Solution {
public:
    string addBinary(string a, string b) {
        int index_a = a.length() - 1;
        int index_b = b.length() - 1;
        int rest = 0;
        int current_int = 0;
        char current_array[2];
        string current_string = "";
        string result = "";
        
        while (index_a >= 0 && index_b >=0) {
            current_int = (a[index_a] - '0' + b[index_b] - '0' + rest) % 2;
            sprintf(current_array,"%d", current_int);
            result = string(current_array) + result;
            rest = (a[index_a] - '0' + b[index_b] - '0' + rest) / 2;
            index_a--;
            index_b--;
        }
        
        while (index_a >= 0) {
            current_int = (a[index_a] - '0'  + rest) % 2;
            sprintf(current_array,"%d", current_int);
            result = string(current_array) + result;
            rest = (a[index_a] - '0' + rest) / 2;
            index_a--;
        }
        
        while (index_b >= 0) {
            current_int = (b[index_b] - '0'  + rest) % 2;
            sprintf(current_array,"%d", current_int);
            result = string(current_array) + result;
            rest = (b[index_b] - '0' + rest) / 2;
            index_b--;
        }
        
        if (rest != 0){
            sprintf(current_array,"%d", rest);
            result = string(current_array) + result;
        }
        return result;
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: