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

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

hot3.png

Given two binary strings, return their sum (also a binary string).

For example,

a ="11"
b ="1"
Return"100".

public String addBinary(String a,String b){    char e = '0';//进位    char[] c = (a.length() >= b.length())?a.toCharArray():b.toCharArray();//选a,b中字符最多的    char[] d = (a.length() >= b.length())?b.toCharArray():a.toCharArray();//选a,b中字符最少的        char[] re = new char[c.length + 1];//最后相加结果(预设比a的多一个字符)    int rel = re.length - 1;        //最右位开始进行相加    for(int i = d.length - 1, j = c.length-1; i >= 0; i--,j--){        if(c[j]== '0' && d[i]== '0'){            re[rel--] = e == '0' ? '0' : '1';            e = '0';        }else if(c[j] == '0' && d[i] =='1'||c[j] == '1' && d[i] == '0'){            re[rel--] = e == '0' ?'1':'0';            e= e == '0' ? '0':'1';        }else{            re[rel--] = e == '0' ? '0':'1';            e='1';        }    }        //若c字符数比d字符数多的情况下    if(c.length > d.length){        for(int i = c.length-d.length-1; i >=0 ; i--){            if(c[i] == '0' && e == '0'){                re[rel--]='0';                e='0';            }else if(c[i] == '0' && e == '1'||c[i] == '1' && e == '0'){                re[rel--]='1';                e='0';            }else{                re[rel--]='0';                e='1';            }        }    }        //最左位进行处理    re[0] = e == '1' ? '1' : '0';    return e == '1' ? new String(re) : new String(re).substring(1);}@Testpublic void testAddBinary(){    Assert.assertEquals("0",addBinary("0","0") );    Assert.assertEquals("1",addBinary("1","0") );    Assert.assertEquals("1",addBinary("0","1") );    Assert.assertEquals("10",addBinary("1","1") );    Assert.assertEquals("110",addBinary("11","11") );    Assert.assertEquals("101",addBinary("11","10") );    Assert.assertEquals("100",addBinary("11","1") );    Assert.assertEquals("100",addBinary("11","1") );    Assert.assertEquals("10000",addBinary("1111","1") );    Assert.assertEquals("1001",addBinary("1000","1") );    Assert.assertEquals("110111101100010011000101110110100000011101000101011001000011011000001100011110011010010011000000000"                            , addBinary("10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101"                                        ,"110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011"));}

思路:二进制加法

更加简便的方法

public String addBinary2(String a, String b) {    int i = a.length() - 1, j = b.length() - 1, carry = 0;    StringBuilder sb = new StringBuilder();    while(i >=0 || j >=0){        int m = i >= 0 ? a.charAt(i) - '0' : 0;        int n = j >= 0 ? b.charAt(j) - '0' : 0;        int sum = m + n + carry;        carry = sum / 2;        sb.insert(0, String.valueOf(sum % 2));        i--;        j--;    }    if(carry != 0) sb.insert(0, '1');    return sb.toString();}@Testpublic void testAddBinary2(){    Assert.assertEquals("0",addBinary2("0","0") );    Assert.assertEquals("1",addBinary2("1","0") );    Assert.assertEquals("1",addBinary2("0","1") );    Assert.assertEquals("10",addBinary2("1","1") );    Assert.assertEquals("110",addBinary2("11","11") );    Assert.assertEquals("101",addBinary2("11","10") );    Assert.assertEquals("100",addBinary2("11","1") );    Assert.assertEquals("100",addBinary2("11","1") );    Assert.assertEquals("10000",addBinary2("1111","1") );    Assert.assertEquals("1001",addBinary2("1000","1") );    Assert.assertEquals("110111101100010011000101110110100000011101000101011001000011011000001100011110011010010011000000000"                            , addBinary2("10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101"                                        ,"110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011"));}

简便那个来自

转载于:https://my.oschina.net/jallenkwong/blog/604329

你可能感兴趣的文章
MySQL 升级时分区表的警告处理
查看>>
mac下server开发环境配置
查看>>
IOS研发之路-卸载软件
查看>>
【学习笔记6】Result配置的各种视图转发类型
查看>>
深入讲解RPM包安装/升级/查询/卸载
查看>>
Eclipse使用EGit管理git@OSC项目
查看>>
Ehcache(01)——简介、基本操作
查看>>
idea及其插件sbt,Scala安装配置
查看>>
设计模式--这段很重要
查看>>
java读取指定package下的所有class
查看>>
settimeout 推荐的最小值
查看>>
MySQL 常用命令
查看>>
HttpClient4上传文件
查看>>
centos6.4和Ubuntu14.04搭建SNMP服务
查看>>
为微信小程序增加mixin扩展
查看>>
敏感信息识别方法探究
查看>>
创建一个可执行的python脚本
查看>>
听云APP 图表分析
查看>>
Oracle排名函数运用实例
查看>>
【推荐】[网址]PHP各种开源网站系统、cms系统一览[持续更新]
查看>>