Lintcode 408 解题思路及c++代码
408. 二進制求和
題目:
給定兩個二進制字符串,返回他們的和(用二進制表示)。
樣例
樣例 1:
輸入:
a = “0”, b = “0”
輸出:
“0”
樣例 2:
輸入:
a = “11”, b = “1”
輸出:
“100”
思路:
剛拿到手的時候,心想就是一個二進制而已,寫一個二進制相加就行了,但是上手的時候坑就特別多了。
1.我踩的第一個坑:我心里想著是從個位相加,但是并沒有代碼卻是分別都從下標為0開始相加,這是一個大坑;
2.第二個坑:兩個字符串長度不等的時候怎么做呢?我一開始想到的是先算重疊部分,后面再相加,但是實現起來就很暈了。
3.第三個坑:這是基本功的問題,一開始int直接強制轉化成char,用的是char(a),可是一直亂碼;后面直接用char(a+‘0’);于是乎我是一直把強制轉化想簡單了,以為直接用就了,其實是利用ASCII做的轉換。char(1)是把1轉換為ASCII為1的字符;我一直一位是把1轉化成1;
接下來講講大概的思路:
第一步:我們要把字符轉化成數字,并且做一個二進制相加;
第二部:在轉換成數字的時候需要注意一個點,字符串長短不一的時候如何處理。我的做法是用字符串的長度length-1做自減,如果等于0說明是最后一個,小于0則這個字符串已經結束,那么接下來的每次運算,直接給一個0,最后跳出循環的條件則是兩個長度都為負。
第三部,最后快結束的時候還要看看最后的進位flag是否為1,為1的話還在最前面加個1。
最后附上代碼:在這里插入代碼片
string addBinary(string &a, string &b) {// write your code hereint c,d,e,flag;string sum="";int i=a.size()-1,j=b.size()-1;for(;i>=0||j>=0;i--,j--) {if(i<0) c=0;else c=a[i]-'0';if(j<0) d=0;else d=b[j]-'0';if(flag==1) {e=c+d+1;flag=0;}else e=c+d;if(e>=2) {sum=char((e-2)+'0')+sum;flag=1;}else sum=char(e+'0')+sum; }if(flag==1) sum='1'+sum;return sum;}```總結
以上是生活随笔為你收集整理的Lintcode 408 解题思路及c++代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Lintcode 973 解题思路及c+
- 下一篇: Lintcode 569解题思路及c++