int aSize = a.length(); int bSize = b.length(); int cSize = Math.max(aSize, bSize) + 1; int[] aArr = newint[cSize]; int[] bArr = newint[cSize]; int[] cArr = newint[cSize];
为A,B赋值
1 2 3 4 5 6 7 8
// 赋值 for (int i = aSize - 1; i >= 0; i--) { aArr[aSize - i - 1] = Integer.parseInt(String.valueOf(a.charAt(i))); }
for (int i = bSize - 1; i >= 0; i--) { bArr[bSize - i - 1] = Integer.parseInt(String.valueOf(b.charAt(i))); }
计算c,这里要考虑如果有进位,在c[i+1]中赋值这个进位
1 2 3 4 5 6 7 8 9 10
// 计算 for (int i = 0; i < cArr.length - 1; i++) { int t = aArr[i] + bArr[i] + cArr[i]; if (t < 2) { cArr[i] = t; } else { cArr[i] = t - 2; cArr[i + 1] = 1; } }
反向输出字符串,忽略前面的0
1 2 3 4 5 6 7 8 9 10 11
String res = ""; int flag = 0; for (int i = cSize - 1; i >= 0; i--) { if(cArr[i] == 0 && flag == 0){ flag = 1; continue; } flag = 1; res += cArr[i]; } return res;
classSolution{ public String addBinary(String a, String b){ int size = Math.max(a.length(), b.length()); int step = 0; String res = ""; for (int i = 0; i < size; i++) { int a_j = 0; int b_j = 0; if (a.length() - i - 1 < a.length() && a.length() - i - 1 >= 0) { a_j = Integer.parseInt(String.valueOf(a.charAt(a.length() - i - 1))); }
if (b.length() - i - 1 < b.length() && b.length() - i - 1 >= 0) { b_j = Integer.parseInt(String.valueOf(b.charAt(b.length() - i - 1))); }
int s = a_j + b_j + step; if (s < 2) { res += s; step = 0; } else { s = s - 2; res += s; step = 1; } } // 最后一个进位 if (step == 1) { res += "1"; }
String res_new = ""; for (int i = res.length() - 1; i >= 0; i--) { res_new += res.charAt(i); } return res_new; } }
1 2 3 4
info 解答成功: 执行耗时:13 ms,击败了7.63% 的Java用户 内存消耗:38.5 MB,击败了14.50% 的Java用户
classSolution{ public String addBinary(String a, String b){ int size = Math.max(a.length(), b.length()); int step = 0; String res = ""; for (int i = 0; i < size; i++) { int a_j = 0; int b_j = 0; if (a.length() - i - 1 < a.length() && a.length() - i - 1 >= 0) { a_j = Integer.parseInt(String.valueOf(a.charAt(a.length() - i - 1))); }
if (b.length() - i - 1 < b.length() && b.length() - i - 1 >= 0) { b_j = Integer.parseInt(String.valueOf(b.charAt(b.length() - i - 1))); }
int s = a_j + b_j + step; if (s < 2) { res = s + res; step = 0; } else { s = s - 2; res = s + res; step = 1; } } if (step == 1) { res = "1" + res; } return res; } }
classSolution{ public String addBinary(String a, String b){ int size = Math.max(a.length(), b.length()); int step = 0; StringBuilder res=new StringBuilder(); for (int i = 0; i < size; i++) { int a_j = 0; int b_j = 0; if (a.length() - i - 1 < a.length() && a.length() - i - 1 >= 0) { a_j = a.charAt(a.length() - i - 1) - '0'; }
if (b.length() - i - 1 < b.length() && b.length() - i - 1 >= 0) { b_j = b.charAt(b.length() - i - 1) - '0'; }
int s = a_j + b_j + step; if (s < 2) { res.append(s); step = 0; } else { s = s - 2; res.append(s); step = 1; } } if (step == 1) { res.append("1"); } return res.reverse().toString(); } }