一 题目描述
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
二 解题思路
首先,由于两个string的长度不一致,这样导致我们很难从尾部遍历两个string中的相对应相加的char,我这边是用了自动填充的方法,即长度小的string,差额在前面补0,保持两个字符串的长度一致;
其次,我们得拿一个变量来判断是否进位,如果进位,就相应加到两个char的相加上,此时清除进位,如果总和大于1,则将赋予进位,相应的该索引对应的值则相应减去2得到未溢出的数值
最后,遍历完后,判断进位标志是否存在,有,则在首部加上字符“1”
三 代码实战
public static String addBinary(String a, String b) {
int subNum = a.length()-b.length();
String s = "";
if(subNum>=0){
b = formatString(b,subNum);
}else{
a = formatString(a,subNum);
}
int len = a.length();
int count =0;
for(int i=len-1;i>=0;i--){
int sum = (int)(a.charAt(i)-'0')+(int)(b.charAt(i)-'0')+count;
count = 0;
if(sum>1){
count =1;
s=(sum-2)+s;
}else {
s=sum+s;
}
}
if(count==1){
s="1"+s;
}
return s;
}
public static String formatString(String c,int num){
String a=c;
for(int i=0;i<Math.abs(num);i++){
a="0"+a;
}
return a;
}