每天一道LeeCode7 二進位制求和

2021-10-01 07:03:54 字數 1759 閱讀 8181

二進位制求和

給定兩個二進位制字串,返回他們的和(用二進位制表示)。

輸入為非空字串且只包含數字10

示例 1:

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

輸入:a = "1010", b = "1011"輸出:"10101"
思路

1、對string短的那個補齊(前面補『0』)

2、將string轉換為int型別,注意這裡不能一起轉換,應該一位一位轉為int,因為一起轉換理論上會出現超出int的範圍的情況。

3、對轉換成的兩個vector(這裡長度是是相等的),逐位加起來,因為是2進製,所以應該進製是 sum/2,該位上留的數是sum%2。

4、對最後的進製處理,如果是1,則結果裡面再push_back乙個1,否則不處理

5、對結果(vector型別)進行逆序輸出,注意這裡是end()-1,begin()-1,否正出錯。。。

for(auto i = res_vector.end()-1;i!=res_vector.begin()-1 ; i--)

6、對結果逐位轉為string型別。   

res = res + '1';             //這裡 res = res +"1"也可以
//倒序遍歷res_vector出現1就『1』,0就是『0』

for(int i = res_vector.size()-1;i>=0;i--)

int num = a.size()-b.size();//a和b差的個數

string str1(num,'0');

b.insert(0,str1);//用0補全

vectora_;

vectorb_;

//遍歷a的每乙個元素,提取到vector

for(int i = 0;ires_vector;

//遍歷兩個vector的每乙個元素

for(int i = a_.size()-1;i>=0;i--)

int num = a.size()-b.size();//a和b差的個數

string str1(num,'0');

b.insert(0,str1);//用0補全

vectora_;

vectorb_;

//遍歷a的每乙個元素,提取到vector

for(int i = 0;ires_vector;

//遍歷兩個vector的每乙個元素

for(int i = a_.size()-1;i>=0;i--)

//處理最後乙個進製

if(carry==1)

//倒序遍歷res_vector出現1就『1』,0就是『0』

for(int i = res_vector.size()-1;i>=0;i--)

else

res = res + '0';

}return res;

}};

總結

1、思路太蠢了。。。

2、vector、stl太不熟練

每天一道演算法題 二進位制中1的個數

題目描述 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。測試用例 0 1 2 10 對應輸出應該為 0 1 1 2 分析 如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1 如果最右邊的1...

每天一道演算法題 二進位制數中1的個數

這是我在面試時考官問我的一道演算法題,但是當時我沒有好的想法,只是用最基本的方法寫出來的,現在整理一下這道題的思路 1 不完善版 問題一 如果把右移換成 2可以嗎 不可以,因為除法的效率比移位運算的效率低 問題二 如果輸入的負數會出現什麼情況 因為是右移,負數會高位補1,最後陷入死迴圈 public...

每天一道劍指offer 重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 根據二叉樹前序遍歷和終須遍歷可以唯一確定一顆二叉樹 前序遍歷順序 先遍歷根節點,在前序遍歷左子節點,最後前序遍歷右子...