LeetCode67-二进制求和(很长的水题)

本文提供了一种简洁而高效的一次性通过且最优的二进制加法解决方案,避免了冗余步骤,强调代码易读性。详细解释了如何利用StringBuilder进行操作,确保正确处理进位,并最终反转结果字符串以获得正确答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一眼就看出来肯定要溢出!

 

 

一次通过!而且是最优的方法

 

 

除了麻烦一点,没有太大的问题

 

主要是一次就能通过这么长的代码,我真的很强!

简洁是其次,代码最重要是易懂!

public String addBinary(String a, String b) {




            //反着存,到最后反转即可
            StringBuilder result = new StringBuilder();

            //不对0,长度不一样,那么是要从各自右边算起,而不是取一个值

            boolean flag = false;

            int i = a.length()-1;
            int j = b.length()-1;

            //先加长度相同的部分
            while(i>=0&&j>=0){

                if(a.charAt(i)=='1'){

                    if(b.charAt(j)=='0'){

                        if(flag){
                            result = result.append('0');
                        }else{
                            result = result.append('1');
                        }

                    }else {
                        if(flag){
                            result = result.append('1');
                        }else{
                            result = result.append('0');
                            flag=true;
                        }
                    }


                }else{

                    if(b.charAt(j)=='0'){

                        if(flag){
                            result =result.append('1');
                            flag=false;
                        }else{
                            result = result.append('0');
                        }


                    }else{

                        if(flag){
                            result =result.append('0');
                        }else{
                            result = result.append('1');
                        }


                    }


                }

                j--;
                i--;
            }

            //出来之后,看看谁还没加完
            if(i<0&&j<0){
                //不用管了,都ok了
            }else if (i>=0){
                //进位好烦
                while(i>=0){
                    if(a.charAt(i)=='1'){
                        if(flag){
                            result = result.append('0');
                        }else{
                            result = result.append('1');
                        }
                    }else{
                        if(flag){
                            result = result.append('1');
                            flag=false;
                        }else{
                            result = result.append('0');
                        }
                    }
                    i--;
                }
            }else{
                while(j>=0){
                    if(b.charAt(j)=='1'){
                        if(flag){
                            result = result.append('0');
                        }else{
                            result = result.append('1');
                        }
                    }else{
                        if(flag){
                            result = result.append('1');
                            flag=false;
                        }else{
                            result = result.append('0');
                        }
                    }
                    j--;
                }

            }

            //最后还有一个进位
            if(flag){
                result = result.append(1);
            }


            return result.reverse().toString();

    }

 

转载于:https://www.cnblogs.com/weizhibin1996/p/9392267.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值