lintcode 二進位制求和 給定兩個二進位制字串,返回他們的和(用二進位制表示)。
阿新 • • 發佈:2019-01-05
Lintcode容易題
二進位制求和
15:00給定兩個二進位制字串,返回他們的和(用二進位制表示)。
您在真實的面試中是否遇到過這個題? Yes 樣例a = 11
b = 1
返回 100
public class Solution { /** * @param a a number * @param b a number * @return the result */ public String addBinary(String a, String b) { //java程式碼思路: /*和求兩個連結串列的和很類似 考慮進位,考慮最後一項的進位 0+0 = 0 不需要進位 0+1 = 1 不需要進位 1+1 =0 進位 1 同時注意 低位進1,高位時1+1的情況,直接加就是3了,這個需要進位1 ,原位的結果也是1的情況 */ // Write your code here String result = ""; int aLen = a.length() - 1; int bLen = b.length() - 1; int sum = 0; while(aLen>=0 || bLen>=0){ if(aLen>=0){ sum +=Integer.parseInt(a.substring(aLen,aLen+1)); aLen--; } if(bLen>=0){ sum +=Integer.parseInt(b.substring(bLen,bLen+1)); bLen--; } if(sum==2){ result = "0" + result; sum=1; }else if(sum==0 || sum==1) { result = sum +"" + result; sum = 0; }else if(sum==3){ result = "1" + result; sum = 1; } } if(sum==1) result = "1" + result; return result; } }
整理的題目的相應的C++和java的原始碼</pre><p>C++程式碼:</p><p></p><p></p><pre name="code" class="cpp">class Solution { public: /** * @param a a number * @param b a number * @return the result */ string addBinary(string& a, string& b) { // Write your code here string result = ""; int c = 0, num = 0; int i = a.size() - 1, j = b.size() - 1; for (; i >= 0 && j >= 0; i--, j--){ num = (a[i] - '0') + (b[j] - '0') + c; c = num / 2; num = num % 2; result += ('0' + num); } for (; i >= 0; i--){ num = (a[i] - '0') + c; c = num / 2; num = num % 2; result += ('0' + num); } for (; j >= 0; j--) { num = (b[j] - '0') + c; c = num / 2; num = num % 2; result += ('0' + num); } if (c != 0) { result += ('0' + c); } i = 0; j = result.size() - 1; while (i < j){ char temp = result[i]; result[i] = result[j]; result[j] = temp; i++; j--; } return result; } }; //int main(){ string s1 = "11"; string s2 = "1"; Solution st; cout << st.addBinary(s1, s2); return 0;}