题目
Given two binary strings, return their sum (also a binary string).
For example, a = “11”, b = “1”, Return “100”.
解答
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
| public class Solution { public String addBinary(String a, String b) { int acur = a.length() - 1; int bcur = b.length() - 1;
StringBuffer sb = new StringBuffer();
boolean flag = false;
while(acur >=0 || bcur >= 0){ int anum = (acur >= 0 ? a.charAt(acur) - '0' : 0); int bnum = (bcur >= 0 ? b.charAt(bcur) - '0' : 0); int res = anum + bnum; if (flag == true) { res++; flag = false; } if (res > 1) { res = res - 2; flag = true; } sb.append(res); acur--; bcur--; }
if(flag == true){ sb.append('1'); } return sb.reverse().toString(); } }
|
注解
没啥好说的,flag标志位标识是否进位,字符串从后往前依次取字符相加,并通过StringBuider追加,最后翻转字符串,返回结果。
反思
CharAt()函数的底层实现
1 2 3 4 5 6
| public char charAt(int index) { if ((index < 0) || (index >= count)) { throw new StringIndexOutOfBoundsException(index); } return value[index + offset]; }
|
StringBuilder与StringBuffer
StringBuilder vs StringBuffer: StringBuffer is synchronized, which means it is thread-safe but slower than StringBuilder.