0字符串简单 LeetCode67. 二进制求和 NC188 二进制求和

67. 二进制求和

描述

给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。

分析

  • 首先把两个字串“对齐”,给短的字符串的头部填充0,使得两个字符串等长。
  • 相加分为三种情况:00,10/01,11。
  • 设一个标记是否需要进位的变量,若为true,说明要进位。
class Solution {
    
    
    public String addBinary(String a, String b) {
    
    
        StringBuffer sba = new StringBuffer(a);
        StringBuffer sbb = new StringBuffer(b);
        StringBuffer sbc = new StringBuffer("");
        while(sba.length() != sbb.length()){
    
    
            if(sba.length()>sbb.length()){
    
    
                sbb.insert(0,'0');
            }else{
    
    
                sba.insert(0,'0');
            }
        }
        int i = sba.length()-1;
        boolean flag = false;
        while(i >= 0){
    
    
            if(sba.charAt(i) == '1' && sbb.charAt(i) == '1'){
    
    
                if(flag == false){
    
    
                    sbc.insert(0,'0');
                }else{
    
    
                    sbc.insert(0,'1');
                }
                flag = true;
            }
            if(sba.charAt(i) == '0' && sbb.charAt(i) == '0'){
    
    
                if(flag == false){
    
    
                    sbc.insert(0,'0');
                }else{
    
    
                    sbc.insert(0,'1');
                }
                flag = false;
            }
            if(sba.charAt(i) == '0' && sbb.charAt(i) == '1' || sba.charAt(i) == '1' && sbb.charAt(i) == '0'){
    
    
                if(flag == false){
    
    
                    sbc.insert(0,'1');
                    flag = false;
                }else{
    
    
                    sbc.insert(0,'0');
                    flag = true;
                }
            }
            i--;
        }
        if(flag == true){
    
    
            sbc.insert(0,1);
        }
        return sbc.toString();
    }
}

Guess you like

Origin blog.csdn.net/weixin_43260719/article/details/121477813