二進位制求和
給定兩個二進位制字串,返回他們的和(用二進位制表示)。
輸入為非空字串且只包含數字1
和0
。
示例 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 重建二叉樹
題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 根據二叉樹前序遍歷和終須遍歷可以唯一確定一顆二叉樹 前序遍歷順序 先遍歷根節點,在前序遍歷左子節點,最後前序遍歷右子...