[LeetCode]--67. Add Binary

    xiaoxiao2026-03-15  8

    Given two binary strings, return their sum (also a binary string).

    For example, a = “11” b = “1” Return “100”.

    二进制算法,加上对字符串的处理。

    public String addBinary(String a, String b) { if ((a.length() == 0 || a.isEmpty()) && (b.length() == 0 || b.isEmpty())) return null; if (a.length() == 0 || a.isEmpty()) return b; if (b.length() == 0 || b.isEmpty()) return a; int i = a.length() - 1, j = b.length() - 1, sum, m = 0; int[] temp = new int[Math.max(a.length(), b.length()) + 1]; int k = temp.length; while (i >= 0 && j >= 0) { sum = a.charAt(i) - '0' + b.charAt(j) - '0' + m; temp[--k] = sum % 2; m = sum / 2; i--; j--; } while (i >= 0) { sum = a.charAt(i) - '0' + m; temp[--k] = sum % 2; m = sum / 2; i--; } while (j >= 0) { sum = b.charAt(j) - '0' + m; temp[--k] = sum % 2; m = sum / 2; j--; } if (m == 1) temp[0] = 1; String str = ""; for (int l = 0; l < temp.length; l++) { if (l == 0 && temp[l] == 0) continue; str = str.concat(Integer.toBinaryString(temp[l])); } return str; }

    看了一下专业人士写的,跟我差不太多,还是有一点可以借鉴。如果没必要保持原有的字符串啥的,我们可以对不知道大小的情况先进行排序,就知道哪个遍历先完了。而且字符串实现了+号的重载,没必要用concat方法的其实,直接用加号就行。

    public String addBinary(String a, String b) { if(a.length() < b.length()){ String tmp = a; a = b; b = tmp; } int pa = a.length()-1; int pb = b.length()-1; int carries = 0; String rst = ""; while(pb >= 0){ int sum = (int)(a.charAt(pa) - '0') + (int)(b.charAt(pb) - '0') + carries; rst = String.valueOf(sum % 2) + rst; carries = sum / 2; pa --; pb --; } while(pa >= 0){ int sum = (int)(a.charAt(pa) - '0') + carries; rst = String.valueOf(sum % 2) + rst; carries = sum / 2; pa --; } if (carries == 1) rst = "1" + rst; return rst; }
    最新回复(0)