leetcode–demo67二进制求和
这条题首先考虑到的是使用内置函数。
//参数radix表明参数是什么进制的,然而这种方法只能解决32位以内的数
return Integer.toBinaryString(Integer.parseInt(a,2)+Integer.parseInt(b,2));
但是如果字符串太长会出现溢出的情况,所以就考虑了其他方法。
public String addBinary(String a, String b) {
StringBuilder s=new StringBuilder();
int carry=0;//存放进位
int sum=0;
for (int i=a.length()-1,j=b.length()-1;i>=0||j>=0;i--,j--){
sum+=carry;
sum+=i>=0?a.charAt(i)-'0':0;//将字符变成整数
sum+=j>=0?b.charAt(j)-'0':0;
s.append(sum%2);
carry=sum/2;
sum=0;
}
//考虑最后一位产生进位的情况
s.append(carry==1?1:"");
return s.reverse().toString();
}
主要思路就是遍历每个字符,将字符转成数字后相加,要考虑到如果最后两个数相加产生进位的情况。这条题与LeetCode第二题非常相似,区别在于一个是以链表的形式,一个是字符串。