力扣67:二进制求和
Problem: 67. 二进制求和
1. 弄清楚二进制之间如何求和:
1. 先保证长度一致,短的一方进行补零:向前补0(不影响数字),那么如何实现这一步呢?自己想到的是数组,先找到长度Max一方,然后让短的一方的长度变为Max,但是如何实现向前补零呢?没有实现出来。
2. 长度一致后,从后往前计算,满2进1,当前位变为0,依次类推。
至于补零操作:根本不需要使用数组,强大的字符串就可以实现!!
拼接法:在字符串的前面添加'0'即可
如何实现进位操作呢? 当前位的和是由三部分构成:两个字符串各自的数和进位,进行模余,如果等于2,则为0(将当前为添加到字符串中),进位变成1,如果为1(当前位相加不满2),不进位, 进位操作:除法,满2,进1 因为之前计算的步骤都是下标为0,开始逐个添加,所以最后一个进行翻转,变成字符串
Code
class Solution {
public String addBinary(String a, String b) {
int len1=a.length(),len2=b.length();
// if(len1!=len2){
// int len=Math.max(len1,len2);
// int[] num=new int[len];
// if(len1>len2){
// for(int i=len2-1;i>=0;i--){
// num[i]=0;
// }
// }
// }
//补齐长度
while(len1>len2){
b='0'+b;
len2++;
}
while(len1<len2){
a='0'+a;
len1++;
}
int sum=0;
int add=0;
StringBuilder result=new StringBuilder();
//进行计算
for(int i=len1-1;i>=0;i--){
sum=add;
if(a.charAt(i)=='1'){
sum+=1;
}
if(b.charAt(i)=='1'){
sum+=1;
}
// sum += a.charAt(i) == '1' ? 1 : 0;
// sum += b.charAt(i) == '1' ? 1 : 0;
//处理进位
//sum=1:不进位,=2:进位,当前值变为0;
result.append(sum%2);
// if(sum>=2){
// add=1;
// }else{
// add=0;
// }
add=sum/2;
}
if(add==1){
result.append(add);
}
return result.reverse().toString();
}
}