题目
原题链接:67. 二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:
输入: a = “1010”, b = “1011”
输出: “10101”
代码
类似于高精度加法(二进制太简单了,懒得将字符转化为数字再加。干脆就直接判断了)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| class Solution { public String addBinary(String aa, String bb) { if(aa.length() < bb.length()) return addBinary(bb,aa); StringBuilder sb = new StringBuilder(); String a = new StringBuffer(aa).reverse().toString(); String b = new StringBuffer(bb).reverse().toString(); int index = 0; int temp = 0; while(index < a.length()){ if(index >= b.length()){ if(temp == 1){ if(a.charAt(index) == '1'){ sb.append('0'); } else { sb.append('1'); temp = 0; } } else { sb.append(a.charAt(index)); } }else{ if(a.charAt(index) == '1' && b.charAt(index) == '1'){ if(temp == 1){ sb.append('1'); }else{ sb.append('0'); temp = 1; } } else if(a.charAt(index) == '0' && b.charAt(index) == '0'){ if(temp == 1){ sb.append('1'); temp = 0; } else { sb.append('0'); } } else { if(temp == 1){ sb.append('0'); } else { sb.append('1'); } } } index++; } if(temp == 1) sb.append('1'); return sb.reverse().toString(); } }
|