LeetCode第67题addBinary列竖式逢二进一的解法

最朴素的思想

先转化成十进制数,再相加,最后再用toBinaryString方法返回
但是这处理不了int溢出的情况

class Solution {
    public String addBinary(String a, String b) {
        return Integer.toBinaryString(
            Integer.parseInt(a, 2) + Integer.parseInt(b, 2)
        );
    }
}

解题思路

列竖式逢二进一思想。只不过为了方便处理最后最高位的进位,我们采用先加低位存到要返回的字符串的高位最后逆转的方式,比如100+100 先加最后的0得到0,再加倒数第二位得到00,再加第三位得到000,最后有进位添上1,得到字符串0001 再逆转为1000。

解题代码

class Solution{
	public String addBinary(String a,String b){//列竖式逢二进一思想
        StringBuilder ans = new StringBuilder();
        int carry = 0;//从低位开始(注意低位在字符串末尾)存到高位最后反转,方便最后的进位 carry是存储每一位的进位
        for(int i = a.length() - 1, j = b.length() - 1;i >= 0 || j >= 0; i--, j--) {
            int sum = carry;//sum是从低位开始相加的每一位的加法 初始带有上一次加法的进位
            sum += i >= 0 ? a.charAt(i) - '0' : 0;
            sum += j >= 0 ? b.charAt(j) - '0' : 0;
            ans.append(sum % 2);
            carry = sum / 2;//存储本位相加是否有进位
        }
        ans.append(carry == 1 ? carry : "");//最后的进位存到最后一位
        return ans.reverse().toString();//字符串逆转
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值