本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/40480151
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
通常情况下,我们会考虑使用现有的Interger.valueOf(String s, int radix)或者Long.valueOf(String s, int radix)直接进行转换,将二进制转换为十进制,相加后
再使用toBinaryString()方法转换为二进制数。
private static String addBinary(String a, String b) { int x = Integer.valueOf(a, 2); int y = Integer.valueOf(b, 2); int z = x + y; String binaryString = Integer.toBinaryString(z); return binaryString; }
private static String addBinary(String a, String b) { long x = Long.valueOf(a, 2); long y = Long.valueOf(b, 2); long z = x + y; String binaryString = Long.toBinaryString(z); return binaryString; }
但是,如果给定的字符串的长度大于int的最大值、long的最大值就会抛出java.lang.NumberFormatException异常。在给定了字符串的范围的情况下,可以考
虑使用上面的两种方法,那样效率会高一些。
如果不确定字符串的范围,最好使用下面的方法进行操作。
private static String addBinary(String a, String b) { /** i、j分别指向a、b的末尾字符 **/ int i = a.length() - 1; int j = b.length() - 1; /** 进位标记 **/ int carry = 0; /** 将String转为char数组 **/ char[] achar = a.toCharArray(); char[] bchar = b.toCharArray(); /** 结果数组 **/ char[] resultchar = new char[Math.max(achar.length, bchar.length) + 2]; /** 标记结果数组位置 **/ int resultIndex = 0; while (true) { if (i < 0 && j < 0 && carry == 0) break; int aflag = 0; int bflag = 0; if (i >= 0) aflag = achar[i] - '0'; if (j >= 0) bflag = bchar[j] - '0'; if (aflag + bflag + carry > 1) { resultchar[resultIndex] = (char) ('0' + aflag + bflag + carry - 2); carry = 1; } else { resultchar[resultIndex] = (char) ('0' + aflag + bflag + carry); carry = 0; } resultIndex++; i--; j--; } String result = new String(resultchar, 0, resultIndex); StringBuffer buffer = new StringBuffer(result); result = buffer.reverse().toString(); return result; }