假ACM模式|leetcode67| 老白二进制求和

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和

 

public class Solution67 {
    public static String addBinary(String a, String b) {
        int flag=0;
        int i=a.length()-1;
        int j=b.length()-1;
        String res="";
//分俩个指针遍历两个字符串
//        记住我们不能忽略较长的那部分
        for(;i>=0||j>=0;){
            int num=0;
            //如果
            //11110
            //....1
            if(i>=0){ 
                num+=a.charAt(i)-'0';
            } else {num=num+0;}
           //这里的else的存在相当于补全了0但写出来很多余于是可以简化成下面那句
            if(j>=0)num+=b.charAt(j)-'0';
            //num在人类大脑的感觉里就应该是该位上两个加数的加和加上进位flag对吧,加数加和我们在上两步做到1
            num+=flag;
            //好家伙,现在我们来看看这个位置产不产生flag进位把
            flag=num/2;
            //现在该位底剩下什么呢,那就是取模剩下的了
            num=num%2;
            //我们得到改位是个数字题目要我们返回字符串啊咋办
            //我surfing in Internet了下,发现装箱之后的数字可以转成字符串
            Integer itg=num;
            //为啥toString写在前面呀,因为我们算加法是从后往前的吧,那必然得把新搞出来的写前面吧
            res=itg.toString()+res;
            i--;
            j--;

        }if(flag==1){
            //老问题算到第一位依然要进位怎么办,那就是前面给他加一位一嘛进位又不能进2不是吗》
            res='1'+res;
        }
        return res;
    }

    public static void main(String[] args) {
        System.out.println(addBinary("11","11"));
    }
}

装箱操作参考文献(69条消息) Java数字、字符、字符串互相转换_有时候我也会的博客-CSDN博客_java数据转字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值