LeetCode -67.二进制求和 -简单

    技术2022-07-10  142

    一、题目描述

    示例: 二、解题思路 **将两个字符串用0补到长度相同,保证全程可以进行同样的操作。**实际操作时,对两个字符串逆向进行处理,并在下标超出0时,对应的值都为0即可。 使用StringBuffer用于保存结果,最后调用StringBuffer的reverse方法反转,即可得到正确的答案。

    三、编程实现

    class Solution { public String addBinary(String a, String b) { if(a.length() < 1 || b.length() > Math.pow(10,4)) return null; StringBuffer sb = new StringBuffer(); int isPlus = 0; //标志是否进位 for(int i = a.length() - 1, j = b.length() - 1;i >= 0 || j >= 0; i--, j--) { int sum = isPlus; //有进位则加1 //相当于把两个字符串用0补到一样长 sum += i >= 0 ? a.charAt(i) - '0' : 0; sum += j >= 0 ? b.charAt(j) - '0' : 0; sb.append(sum % 2); isPlus = sum / 2; } if (isPlus == 1) sb.append(1); return sb.reverse().toString(); } }

    for循环的条件,同时对两个字符串的码点进行遍历。特别要注意的是,判断循环是否继续时,用的是i >= 0 || j >= 0,或。这就是把两个字符串视作相同长度,当下标小于零的时候,都看做是0即可。

    //相当于把两个字符串用0补到一样长 sum += i >= 0 ? a.charAt(i) - '0' : 0; sum += j >= 0 ? b.charAt(j) - '0' : 0;
    Processed: 0.012, SQL: 9