坚持坚持! 题目要求求两个二进制数的加法
算法思路: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(); } }