class Solution {
public String addBinary(String a, String b) {
int n=Math.max(a.length(),b.length());
int[] nums=new int[n+1];
//先把能对齐的部分加起来
int i=n, p=a.length()-1, q=b.length()-1;
for(;p>=0&&q>=0;i--, p--, q--){
nums[i]=a.charAt(p)-'0'+(b.charAt(q)-'0');
}
//然后多出来的直接赋值
if(p<0){
for(int k=q;k>=0;k--,i--){
nums[i]=b.charAt(k)-'0';
}
}
else{
for(int k=p;k>=0;k--,i--){
nums[i]=a.charAt(k)-'0';
}
}
//单独处理进位,这里nums0正好留出来,如果最高位需要进位的话
for(int j=n;j>=1;j--){
if(nums[j]>=2){
nums[j-1]+=1;
nums[j]=nums[j]%2;
}
}
//转换成字符串
String ans="";
for(int j=0;j<=n;j++){
if(j==0&&nums[j]==0)continue;
ans+=String.valueOf(nums[j]);
}
return ans;
}
}
Solution 2:思路同我,别人的更加elegant的
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();
}
}