uacs2024

导航

leetcode67. 二进制求和

67. 二进制求和

微信截图_20251124222612

法一:一开始写的倒序操作字符串,符合正常手算。

class Solution {
    public String addBinary(String a, String b) {
        if(a.length() < b.length())  return addBinary(b,a);
        int aLen = a.length(),bLen = b.length();
        StringBuilder sb = new StringBuilder();
        for(int i = 0;i < (aLen - bLen);++i){
            sb.append("0");
        }
        sb.append(b);
        b = sb.toString();
        int flag = 0;
        for(int i = aLen - 1;i >= 0;--i){
            int plus = a.charAt(i) + b.charAt(i) - 2 * '0' + flag;
            if(plus <= 1){
                if(plus == 0)  sb.setCharAt(i,'0');
                else if(plus == 1)  sb.setCharAt(i,'1');
                flag = 0;
            }else{
                if(plus == 2)  sb.setCharAt(i,'0');
                else if(plus == 3)  sb.setCharAt(i,'1');
                flag = 1;
            }
        }
        if(flag == 1)  return ("1" + sb).toString();
        return sb.toString();
    }
}

法一优化:对plus值的判断(plus <=1和 plus == 2或 3)可以简化为直接用取模和除法运算处理当前位和进位。

class Solution {
    public String addBinary(String a, String b) {
        if (a.length() < b.length()) {
            return addBinary(b, a);
        }
        
        int lenA = a.length(), lenB = b.length();
        StringBuilder res = new StringBuilder(); // 用于存储结果
        int carry = 0; // 进位
        
        // 从右向左遍历每一位
        for (int i = 0; i < lenA; i++) {
            int digitA = a.charAt(lenA - 1 - i) - '0';//获取a的当前位数字
            // 获取b的当前位数字,如果b已遍历完则为0
            int digitB = (i < lenB) ? b.charAt(lenB - 1 - i) - '0' : 0;
            
            int sum = digitA + digitB + carry; // 当前位总和
            res.append(sum % 2); // 当前位结果
            carry = sum / 2; // 更新进位
        }
        
        // 处理最后的进位
        if (carry > 0)  res.append('1');
        
        // 由于我们是反向添加的,需要反转得到正确结果
        return res.reverse().toString();
    }
}

 法二:直接使用api。如果二进制字符串较大此方法不能通过。

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

 

posted on 2025-11-24 22:33  ᶜʸᵃⁿ  阅读(2)  评论(0)    收藏  举报