LeetCode

领扣67 二进制求和

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 1 和 0。
示例 1:“
Input: a = “11”, b = “1”
Output: "100"12
示例 2:
Input: a = “1010”, b = “1011”
Output: “10101”

public String addBinary(String a, String b) {
        int len1=a.length();
        int len2=b.length();
        int i=len1-1;
        int j=len2-1;
        int c = 0,sum=0, sum1=0;
        int man1,min1;
        if(len1>len2) {
         man1=len1;
        }
        else
         {
         man1=len2;
         }         
        char[] num1=a.toCharArray();
        char[] num2=b.toCharArray();         
        StringBuilder sb=new StringBuilder();      
        {
     while(man1!=-1) {
                     sum = i<0?-1:(num1[i]-'0');
               sum1 = j<0?-1:(num2[j]-'0');
               if(sum!=-1&&sum1!=-1) {   //分成不同的几种情况,所有if语句代码都是重复操作
            switch(sum+sum1+c) {
                   case 0: sb.append(0);c=0;break;
                   case 1: sb.append(1);c=0;break;
                   case 2: sb.append(0);c=1;break;
                   case 3: sb.append(1);c=1;break;
           
                    }
               }
               else
               {
                if(sum==-1&&sum1!=-1)
                 switch(sum1+c) {
                       case 0: sb.append(0);c=0;break;
                       case 1: sb.append(1);c=0;break;
                       case 2: sb.append(0);c=1;break;
                       case 3: sb.append(1);c=1;break;           
                        }               
                 else 
                {
                  if(sum1==-1&&sum!=-1)  //
                 switch(sum+c) {
                       case 0: sb.append(0);c=0;break;
                       case 1: sb.append(1);c=0;break;
                       case 2: sb.append(0);c=1;break;
                       case 3: sb.append(1);c=1;break;               
                        }
                  else 
                  {
                   if(sum==-1&&sum1==-1&&c!=0)
                    sb.append(1);
                  }     
             }
     }
         i--;j--;
          man1--;   
      if(i==-1&&j==-1&&c==0)
           break;
     }
     sb.reverse();
      String result= ""+sb;                
      return result;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值