LeetCode -[簡單]-67. 二進位制求和-Java實現
阿新 • • 發佈:2018-12-24
題目描述:
給定兩個二進位制字串,返回他們的和(用二進位制表示)。
輸入為非空字串且只包含數字 1
和 0
。
示例 1:
輸入:a = "11" b="1"
輸出:"100"
示例 2:
輸入:a = "1010" b="1011"
輸出:"10101"思路:
根據二進位制的相加規則,當前位相加再%2則為結果,進位則/2。
可以先建立一個StringBuilder型別的result,從後往前,將每一位相加,結果加入result,最後反轉輸出。
程式碼:
class Solution { public String addBinary(String a, String b) { StringBuilder result = new StringBuilder(); int al = a.length()-1; int bl = b.length()-1; int carry = 0; while( al >=0 || bl >=0 ) { int sum = carry; if(al >= 0) { sum += (a.charAt(al) - '0'); al--; } if(bl >= 0) { sum += (b.charAt(bl) - '0'); bl--; } result.append(sum%2); //相加結果 carry = sum /2; //進位,如果是1那麼carry=0,如果是2則要進位給下面一位+1 } if(carry !=0 ) //都相加完了,還要進位的情況 result.append(1); return result.reverse().toString(); //先反轉,再輸出 } }