博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
67. Add Binary
阅读量:5973 次
发布时间:2019-06-19

本文共 1896 字,大约阅读时间需要 6 分钟。

一、题目

  1、审题

  2、分析

    给出两个只含有 0、1的二进制数值,求其加法形成的新数组。

 

二、解答

  1、思路:

    方法一、

      ①、两个指针分别指向 a、b末尾,两个指针由后边向前一起移动,同时所指下标的两个字符作二进制加法,用 StringBuffer进行记录,同时记录是否有进位。

      ②、最终会有一个字符串先遍历结束,将剩下的字符串数值添加到 StringBuffer 中。

public String addBinary(String a, String b) {            StringBuffer sb = new StringBuffer();                int aIndex = a.length() - 1;        int bIndex = b.length() - 1;        int sign = 0;        int aNum, bNum, num;        while(aIndex >= 0 && bIndex >= 0) {            aNum = a.charAt(aIndex--) - '0';            bNum = b.charAt(bIndex--) - '0';                        num = sign + aNum + bNum;            sb.append(num % 2);            if(num / 2 == 1)                sign = 1;            else                sign = 0;        }                while(aIndex >= 0) {            aNum = a.charAt(aIndex--) - '0';            num = aNum + sign;            sb.append(num % 2);            if(num / 2 == 1)                sign = 1;            else                sign = 0;        }                while(bIndex >= 0) {            bNum = b.charAt(bIndex--) - '0';            num = bNum + sign;            sb.append(num % 2);            if(num / 2 == 1)                sign = 1;            else                sign = 0;        }                if(sign == 1)            sb.append('1');                return sb.reverse().toString();    }

  

  方法二、

    优化,直接在一个循环中进行字符的加法。

public String addBinary(String a, String b) {            StringBuffer sb = new StringBuffer();                int c = 0;        int i = a.length() - 1;        int j = b.length() - 1;        while(i >= 0 || j >= 0 || c == 1) {                        c += (i >= 0 ? a.charAt(i--) - '0' : 0);            c += (j >= 0 ? b.charAt(j--) - '0' : 0);            sb.append(c%2);            c /= 2;                    }                return sb.reverse().toString();    }

 

  

 

转载于:https://www.cnblogs.com/skillking/p/9685640.html

你可能感兴趣的文章
浏览器 HTTP 协议缓存机制详解
查看>>
Linux 下使用 NMON 分析系统性能(转载+实战)
查看>>
【总结】冒泡排序及冒泡排序的两种优化
查看>>
网络配置管理之ip、ss、配置文件、网卡命名规则、nmcli
查看>>
搞一个汉字拼音库
查看>>
Pg异步复制系统Bucardo
查看>>
正则---基础
查看>>
惠普联手VMware共推桌面云解决方案
查看>>
panabit一款流量监管软件
查看>>
mysql基本常识整理
查看>>
windows server 2008 平台cluster+SQL2008部署<1>
查看>>
python中执行命令的3种方法小结
查看>>
Intel boards with integrated Matrox MGA G200 video will require VESA driver on 32bit RHEL 5
查看>>
mysql的登录管理
查看>>
Informatica 9.5.1实验记录
查看>>
Linux系统环境crontab定时任务设置参数实例及常用技巧
查看>>
VMware vSAN分布式存储安装配置
查看>>
linux下将不同线程绑定到不同core和cpu上 pthread_setaffinity_np
查看>>
远程桌面体验注意事项
查看>>
mysqldump常用方法
查看>>