一、题目
1、审题
2、分析
给出两个只含有 0、1的二进制数值,求其加法形成的新数组。
二、解答
1、思路:
方法一、
①、两个指针分别指向 a、b末尾,两个指针由后边向前一起移动,同时所指下标的两个字符作二进制加法,用 StringBuffer进行记录,同时记录是否有进位。
②、最终会有一个字符串先遍历结束,将剩下的字符串数值添加到 StringBuffer 中。
public String addBinary(String a, String b) { StringBuffer sb = new StringBuffer(); int aIndex = a.length() - 1; int bIndex = b.length() - 1; int sign = 0; int aNum, bNum, num; while(aIndex >= 0 && bIndex >= 0) { aNum = a.charAt(aIndex--) - '0'; bNum = b.charAt(bIndex--) - '0'; num = sign + aNum + bNum; sb.append(num % 2); if(num / 2 == 1) sign = 1; else sign = 0; } while(aIndex >= 0) { aNum = a.charAt(aIndex--) - '0'; num = aNum + sign; sb.append(num % 2); if(num / 2 == 1) sign = 1; else sign = 0; } while(bIndex >= 0) { bNum = b.charAt(bIndex--) - '0'; num = bNum + sign; sb.append(num % 2); if(num / 2 == 1) sign = 1; else sign = 0; } if(sign == 1) sb.append('1'); return sb.reverse().toString(); }
方法二、
优化,直接在一个循环中进行字符的加法。
public String addBinary(String a, String b) { StringBuffer sb = new StringBuffer(); int c = 0; int i = a.length() - 1; int j = b.length() - 1; while(i >= 0 || j >= 0 || c == 1) { c += (i >= 0 ? a.charAt(i--) - '0' : 0); c += (j >= 0 ? b.charAt(j--) - '0' : 0); sb.append(c%2); c /= 2; } return sb.reverse().toString(); }