您的位置:首页 > 其它

lintcode --二进制求和

2017-07-25 09:59 309 查看
给定两个二进制字符串,返回他们的和(用二进制表示)。您在真实的面试中是否遇到过这个题? Yes样例a = 
11
b = 
1
返回 
100
 /* 思路:    和求两个链表的和很类似 ,考虑进位,考虑最后一项的进位   0+0 = 0 不需要进位  0+1 = 1 不需要进位  1+1 =0  进位 1  同时注意 低位进1,高位时1+1的情况,直接加就是3了, 这个需要进位1 ,原位的结果也是1的情况 */            public class Solution {    public String addBinary(String a, String b) {                int alen = a.length()-1;        int blen = b.length()-1;        int carries = 0;//进位        String rst = "";                while(blen >= 0&&alen >=0){//因为a>b            int sum = (int)(a.charAt(alen) - '0') +                       (int)(b.charAt(blen) - '0') + carr4000ies;                      //char ch='0'; ch的值是字符'0'的ascii码值,即0x30                     //String s = "110";int c =(int) (s.charAt(1)-0);//0 则c =49                                  //如果是0,只是加进位,不是的话可以再加原来的            rst = String.valueOf(sum % 2) + rst;//            carries = sum / 2;            alen --;            blen --;        }        while(alen >= 0){//只有alen的时候            int sum = (int)(a.charAt(alen) - '0') + carries;            rst = String.valueOf(sum % 2) + rst;            carries = sum / 2;            alen --;        }        while(blen >= 0){//只有alen的时候            int sum = (int)(b.charAt(blen) - '0') + carries;            rst = String.valueOf(sum % 2) + rst;            carries = sum / 2;            blen --;        }                if (carries == 1)//最后的时候            rst = '1' + rst;        return rst;    }    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: