6月23 leetcode 二進制求和

67. 二進制求和

難度簡單404收藏分享切換爲英文關注反饋

給你兩個二進制字符串,返回它們的和(用二進制表示)。

輸入爲 非空 字符串且只包含數字 1 和 0

示例 1:輸入: a = "11", b = "1" 輸出: "100"

示例 2:輸入: a = "1010", b = "1011" 輸出: "10101"

提示:

  • 每個字符串僅由字符 '0' 或 '1' 組成。
  • 1 <= a.length, b.length <= 10^4
  • 字符串如果不是 "0" ,就都不含前導零。

思路一:(暴力法)

將二進制轉換成10進制,然後再將10進制轉換成2進制 

但是這個程序有個Bug,要是二進制長度特別大,int的範圍會溢出。

class Solution {
public:
    string addBinary(string a, string b) 
    {
        if(a.empty()) return b;
        if(b.empty()) return a;
        string res;
        int n = bi_to_int(a)+bi_to_int(b);
        if(n==0) return "0";
        while(n>0)
        {
            res.append(to_string(n%2));//將10進制轉成2進制字符串
            n = n>>1;
        }
        reverse(res.begin(),res.end());// 除2 取餘 倒置

        return res;

    }
    
    int bi_to_int(string a) //將2進制轉換成10進制
    {
        int i=0;
        int num =0;
        for(i = a.length()-1;i>=0;i--)
        {
            if(a.at(i)!='0')
            {
                num += pow(2,a.length()-1-i);//這個下標的處理,需要小心
            }
        }
        return num;
    }
  
};

 

 

class Solution {
public:
    string addBinary(string a, string b) 
    {
        if(a.empty()) return b;
        if(b.empty()) return a;
        string res;
        int lena = a.size();
        int lenb = b.size();
        while(lena < lenb)//將兩個字符串變爲相同長度
        {
            a="0"+a;
            lena++;
        }
        while(lenb < lena)
        {
            b="0"+b;
            lenb++;
        }
        int flag = 0;

        for(int i= lena-1;i>=0;i--)
        {
            if(a[i]-'0'+b[i]-'0'+flag ==0)
            {
                res ="0"+res;
                flag =0;
            }else if(a[i]-'0'+b[i]-'0'+flag ==1)
            {
                res ="1"+res;
                flag =0;
            }else if(a[i]-'0'+b[i]-'0'+flag ==2)
            {
                res ="0"+res;
                flag =1;
            }else if(a[i]-'0'+b[i]-'0'+flag ==3)
            {
                res ="1"+res;
                flag =1;
            }

        }
        if(flag ==1)
        {
            res ="1"+res;
        }

        return res;

    }
    
  
  
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章