ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

二进制求和

2020-06-18 16:59:16  阅读:285  来源: 互联网

标签:二进制 StringBuilder sum 求和 append 字符串 aplus 进位


此博客链接:https://www.cnblogs.com/ping2yingshi/p/13158404.html

二进制求和(106min)

题目链接:https://leetcode-cn.com/problems/add-binary/

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

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

示例 1:

输入: a = "11", b = "1"
输出: "100"
示例 2:

输入: a = "1010", b = "1011"
输出: "10101"

题解:

        思路:            

                1.把字符串反转

                 2.定义一个进位的变量

                 3. 定义一个存储结果的变量

        4.取长度长的字符串循环

        5.分三种情况:情况1.两个字符串都是1,进位也是一,则把1加入到新定义的字符串变量中;进位是0,则把0加入到新定义的字符串中。                              最后把进位都置为1。

                      情况2.两个字符串一个是1,一个是0,如果进位是1,那么结果中存入0,,进位重新置为1,如果进位是0,那把1加入结果                              中,进位置为0.

                      情况3.两个字符串都是0,如果进位是1,把1加入到结果中,进位置为0,如果进位为0,则把0加入到结果中,进位置为0.

        6.对最后一次进位做判断,如果最后一次进位是1,则把1加入到结果中。

        7.把字符串在反转回来.

class Solution {
    public String addBinary(String a, String b) {
        //先把字符串变成stringBuiler类型
        StringBuilder sum=new StringBuilder();
        StringBuilder revasead=new StringBuilder(a);
        StringBuilder revasebd=new StringBuilder(b);
        //反转字符串
          revasead=revasead.reverse();
          revasebd=revasebd.reverse();
        //取长字符串
        int max=Math.max(a.length(),b.length());
        //定义一个进位的变量
        char aplus='0';
        //开始判断
        for(int i=0;i<max;i++)
        {
            char revasea = i >=a.length()?'0':revasead.charAt(i);
            // char aChar = i >= aLength ? '0' : ar.charAt(i);
            char revaseb = i >=b.length()?'0':revasebd.charAt(i);
         // char revaseb = i >=b.length()?'0':revasebd.chatAt(i);
            //情况1
            if(revasea=='1'&&revaseb=='1')
            {
                if(aplus=='1')
                {
                   sum.append('1'); 
                }
                else
                   sum.append('0');
                
                aplus='1';
            }
            //情况2
           else if((revasea=='1'&&revaseb=='0')||(revasea=='0'&&revaseb=='1'))
            {
                if(aplus=='1')
                {
                   sum.append('0'); 
                   aplus='1';
                }
                else
                {
                     sum.append('1');
                     aplus='0';
                }   
                
            }
            //情况3
        
           else if(revasea=='0'&&revaseb=='0')
            {
                if(aplus=='1')
                {
                   sum.append('1'); 
                   aplus='0';
                }
                else
                {
                     sum.append('0');
                     aplus='0';
                }   
                
            }
          

        }
          if(aplus=='1')
            sum.append(aplus);
           return sum.reverse().toString();

    }
}

  

标签:二进制,StringBuilder,sum,求和,append,字符串,aplus,进位
来源: https://www.cnblogs.com/ping2yingshi/p/13158404.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有