题目要求如下
Given two binary strings, return their sum (also a binary string).
For example, a = “11” b = “1” Return “100”.
一开始想的是转化成十进制一加,再转化回来就行,写了这个
class Solution {
public String addBinary(String a, String b) {
char[]a1=a.toCharArray();
char[]b1=b.toCharArray();
int numa=0;
int numb=0;
for(int i=0;i<a1.length;i++){
if(a1[i]=='1'){
numa+=Math.pow(2,a1.length-1-i);
}
}
for(int j=0;j<b1.length;j++){
if(b1[j]=='1'){
numb+=Math.pow(2,b1.length-1-j);
}
}
int numc=numa+numb;
String c=Integer.toBinaryString(numc);
return c;
}
}
发现数字过长会溢出不能解决问题,看了discuss发现直接加就好
public class Solution {
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int i = a.length() - 1, j = b.length() -1, carry = 0;
while (i >= 0 || j >= 0) {
int sum = carry;
if (j >= 0) sum += b.charAt(j--) - '0';
if (i >= 0) sum += a.charAt(i--) - '0';
sb.append(sum % 2);
carry = sum / 2;
}
if (carry != 0) sb.append(carry);
return sb.reverse().toString();
}
}
从高位加到低位看有没进位,简化计算
类似的题看http://blog.csdn.net/srping123/article/details/77371931