给定两个二进制字符串,返回他们的和(用二进制表示)。
a = 11
b = 1
返回 100
解题思路:算法上就是从右至左以此按位相加,并且要考虑进位。除此以外这道题还需要注意的就是数字和字符串之间的互相转化以及字符串的按位取的方法charAt();
1 class Solution { 2 /** 3 * @param a a number 4 * @param b a number 5 * @return the result 6 */ 7 public String addBinary(String a, String b) { 8 // Write your code here 9 int la = a.length(); 10 int lb = b.length(); 11 int p,q,tmp; 12 String res = ""; 13 int max = Math.max( la,lb ); 14 int carry = 0; 15 for(int i = 0;i < max; i++ ){ 16 if(i < la){ 17 p = a.charAt(la-1-i)-'0'; 18 }else{ 19 p = 0; 20 } 21 if(i < lb){ 22 q = b.charAt(lb-1-i)-'0'; 23 }else{ 24 q=0; 25 } 26 tmp = p + q + carry; 27 if(tmp>=2){ 28 tmp=tmp-2; 29 carry = 1; 30 }else{ 31 carry =0; 32 } 33 res = tmp + res; 34 } 35 return (carry==0) ? res : '1'+res; 36 } 37 }