java两个二进制数求和,LeetCode -[简单]-67. 二进制求和-Java实现

题目描述:

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

输入为非空字符串且只包含数字 1 和 0。

示例 1:

输入:a = “11” b=”1″

输出:”100″

示例 2:

输入:a = “1010” b=”1011″

输出:”10101″

思路:

根据二进制的相加规则,当前位相加再%2则为结果,进位则/2。

可以先建立一个StringBuilder类型的result,从后往前,将每一位相加,结果加入result,最后反转输出。

代码:

class Solution {

public String addBinary(String a, String b) {

StringBuilder result = new StringBuilder();

int al = a.length()-1;

int bl = b.length()-1;

int carry = 0;

while( al >=0 || bl >=0 )

{

int sum = carry;

if(al >= 0)

{

sum += (a.charAt(al) - '0');

al--;

}

if(bl >= 0)

{

sum += (b.charAt(bl) - '0');

bl--;

}

result.append(sum%2); //相加结果

carry = sum /2; //进位,如果是1那么carry=0,如果是2则要进位给下面一位+1

}

if(carry !=0 ) //都相加完了,还要进位的情况

result.append(1);

return result.reverse().toString(); //先反转,再输出

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值