坚持坚持! 题目要求求两个二进制数的加法
算法思路:1、要定义几个参数,carry代表进位,opa代表数组a的元素转换成数字,opb代表数组b的元素转换成数字。sum代表数组的和
2、判断两个字符串是否长度相同,如果不同的要从左补齐。
3、两个字符串对齐之后,进行一个for循环,循环从字符串最后一位到第一位,分别对应相加,如果加和等于2的话就该位变为0,进位标志位carry为1,如果加和为1,进位为0
4、利用Java中StringBuilder的字符串具有可变长度的性质,利用append方法将sum连接起来。
5、最后如果carry为1的话则字符串继续append("1")
6、最后一步,利用reverse方法将字符串反转。
Java代码如下:
public class Solution {
public String addBinary(String a, String b) {
int carry=0;
int sum=0;
int opa=0;
int opb=0;
StringBuilder result=new StringBuilder();
while(a.length()!=b.length()){
if(a.length()>b.length()){
b="0"+b;
}else{
a="0"+a;
}
}
for(int i=a.length()-1;i>=0;i--){
opa=a.charAt(i)-'0';
opb=b.charAt(i)-'0';
sum=opa+opb+carry;
if(sum>=2){
result.append((char) (sum-2 +'0'));
carry=1;
}else{
result.append((char) (sum +'0'));
carry=0;
}
}
if(carry==1){
result.append("1");
}
return result.reverse().toString();
}
}