LeetCode第67题addBinary列竖式逢二进一的解法

目录

  • 最朴素的思想
  • 解题思路
  • 解题代码

最朴素的思想

先转化成十进制数,再相加,最后再用toBinaryString方法返回
但是这处理不了int溢出的情况

class Solution {
     
    public String addBinary(String a, String b) {
     
        return Integer.toBinaryString(
            Integer.parseInt(a, 2) + Integer.parseInt(b, 2)
        );
    }
}

解题思路

列竖式逢二进一思想。只不过为了方便处理最后最高位的进位,我们采用先加低位存到要返回的字符串的高位最后逆转的方式,比如100+100 先加最后的0得到0,再加倒数第二位得到00,再加第三位得到000,最后有进位添上1,得到字符串0001 再逆转为1000。

解题代码

class Solution{
     
	public String addBinary(String a,String b){
     //列竖式逢二进一思想
        StringBuilder ans = new StringBuilder();
        int carry = 0;//从低位开始(注意低位在字符串末尾)存到高位最后反转,方便最后的进位 carry是存储每一位的进位
        for(int i = a.length() - 1, j = b.length() - 1;i >= 0 || j >= 0; i--, j--) {
     
            int sum = carry;//sum是从低位开始相加的每一位的加法 初始带有上一次加法的进位
            sum += i >= 0 ? a.charAt(i) - '0' : 0;
            sum += j >= 0 ? b.charAt(j) - '0' : 0;
            ans.append(sum % 2);
            carry = sum / 2;//存储本位相加是否有进位
        }
        ans.append(carry == 1 ? carry : "");//最后的进位存到最后一位
        return ans.reverse().toString();//字符串逆转
    }
}

你可能感兴趣的:(LeetCode,字符串,java)