加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

(String) leetcode 67. Add Binary

发布时间:2020-12-14 04:32:32 所属栏目:大数据 来源:网络整理
导读:Given two binary strings,return their sum (also a binary string). The input strings are both?non-empty?and contains only characters? 1 or? 0 . Example 1: Input: a = "11",b = "1"Output: "100" Example 2: Input: a = "1010",b = "1011"Output: "

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

The input strings are both?non-empty?and contains only characters?1or?0.

Example 1:

Input: a = "11",b = "1"
Output: "100"

Example 2:

Input: a = "1010",b = "1011"
Output: "10101"

---------------------------------------------------------------------------------------------------------------------------------------------

这个题说的是将两个以字符串形式的二进制进行二进制加法运算后得到的结果,结果是string形式。

1)

先从最右端遍历,一个一个相加,可以用一个辅助变量来作为要进位的数,如果其中一个已经遍历完,而另一个还没遍历完,再继续遍历这个没有遍历完的字符串(并不是与另一个字符串二进制对应的数相加)。

用stringstream来将一个int类型的数转换为string类型,不过花的时间可能会比较长。

C++代码:

class Solution {
public:
    string addBinary(string a,string b) {
        int len1 = a.length();
        int len2 = b.length();
        int i = len1-1,j = len2-1;
        int carry = 0;  //进位。
        string str = "";
        while(true){
            if(i < 0 || j < 0){
                break;
            }
            int num1 = a[i] - 0;
            int num2 = b[j] - 0;
            int sum = num1 + num2 + carry;
            stringstream ss;
            string s;
            ss << (sum%2);
            ss >> s;
            str = s + str;
            carry = sum / 2;  //向前进1或进0。
            i--;
            j--;
        }
        if(j >= 0){
            while(j >= 0){
                int num = b[j] - 0;
                int sum = num + carry;
                stringstream ss;
                string s;
                ss << (sum%2);
                ss >> s;
                str = s + str;
                carry = sum / 2;
                j--;
            }
        }
        if(i >= 0){
            while(i >= 0){
                int num = a[i] - 0;
                int sum = num + carry;
                stringstream ss;
                string s;
                ss << (sum%2);
                ss >> s;
                str = s + str;
                carry = sum / 2;
                i--; 
            }
        }
        if(carry > 0){
            stringstream ss;
            string s;
            ss << carry;
            ss >> s;
            str = s + str;
        }
        return str;
    }
};

?

?

2)

也可以直接用char(num + ‘0‘),将一个int类型的数转换为char类型。这样会大大提升速度。

C++代码:

class Solution {
public:
    string addBinary(string a,j = len2-1;
        int carry = 0;
        string str = "";
        while(true){
            if(i < 0 || j < 0){
                break;
            }
            int num1 = a[i] - 0;
            int num2 = b[j] - 0;
            int sum = num1 + num2 + carry;
            str = char(sum%2 + 0) + str;
            carry = sum / 2;
            i--;
            j--;
        }
        if(j >= 0){
            while(j >= 0){
                int num = b[j] - 0;
                int sum = num + carry;
                str = char(sum%2 + 0) + str;
                carry = sum / 2;
                j--;
            }
        }
        if(i >= 0){
            while(i >= 0){
                int num = a[i] - 0;
                int sum = num + carry;
                str = char(sum % 2 + 0) + str;
                carry = sum / 2;
                i--; 
            }
        }
        if(carry > 0){
            str = char(carry + 0) + str;
        }
        return str;
    }
};

?

3)

还可以吧上面的代码进一步优化,缩短代码行。要熟练地运用三元表达式。

C++代码:

class Solution {
public:
    string addBinary(string a,string b) {
        int len1 = a.length();
        int len2 = b.length();
        int carry = 0;
        string str = "";
        for(int i = len1 - 1,j = len2 - 1;i >= 0 || j >= 0;i--,j--){
            int num1 = i >= 0 ? a[i] - 0 : 0;
            int num2 = j >= 0 ? b[j] - 0 : 0;
            int sum = num1 + num2 + carry;
            str = char(sum % 2 + 0) + str;
            carry = sum / 2;
        }
        if(carry > 0){
            str = char(carry + 0) + str;
        }
        return str;
    }
};

4)

这个char还可以用to_string()代替,用to_string(num),这个是<string> 内置的。不过运行速度会变慢。。。。

C++代码:

class Solution {
public:
    string addBinary(string a,j--){
            int num1 = i >= 0 ? a[i] - 0 : 0;
            int num2 = j >= 0 ? b[j] - 0 : 0;
            int sum = num1 + num2 + carry;
            str = to_string(sum % 2) + str;
            carry = sum / 2;
        }
        if(carry > 0){
            str = to_string(carry) + str;
        }
        return str;
    }
};

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读