LeetCode: suma binaria

Descripción del Título

Darle dos cadenas binarias y devolver su suma (en representación binaria).

La entrada es  una cadena no vacía  y contiene solo números  1 y  0.

Ideas

  • a se usa para representar la cadena más larga, b representa la otra
  • Convierta a en una matriz de caracteres ch1 y b en una matriz de caracteres ch2

Atraviesa las matrices de caracteres ch1 y ch2 de atrás hacia adelante. Dado que ch2 se puede atravesar antes que ch1, es necesario definir un carácter temporal . ①Si no se atraviesa ch2, los caracteres de ch2 se almacenan en el carácter temporal ②Si se atraviesa ch2 , Entonces '0' se almacena en el carácter temporal

  • Definir un carácter, lo que significa llevar , el valor inicial es '0'
  • Los resultados preliminares almacenados en ch1 en

Situación ① El acarreo es '0'

  • El carácter en ch1 == '1' y el carácter en ch2 == '1', luego modifique el carácter de ch1 a '0', y modifique el acarreo a '1'
  • El carácter en ch1 == '0' y el carácter en ch2 == '1', luego modifique el carácter en ch1 a '1'

Estuche ② El acarreo es '1'

  • El carácter en ch1 == '0' y el carácter en ch2 == '0', luego modifique el carácter de ch1 a '1', y modifique el acarreo a '0'
  • Caracteres en ch1 == '1' y caracteres en ch2 == '1', continúe
  • El carácter en ch1 o ch2 es '1', luego el carácter en ch1 se cambia a '0'

Después de que se completa todo el recorrido, se utiliza un nuevo objeto StringBuffer para almacenar el resultado del cálculo final . ①Si el acarreo es '1' y su contenido es "1", entonces los elementos en ch1 se empalman en secuencia; ②Si el acarreo es no '1', luego simplemente empalme los elementos en ch1 directamente

Código

class Solution {
    public String addBinary(String a, String b) {
        if(a.length()<b.length()){
            String tem=a;
            a=b;
            b=tem;
        }
        char[] ch1=new char[a.length()];
        char[] ch2=new char[b.length()];
        for(int i=0;i<ch1.length;i++){
            ch1[i]=a.charAt(i);
        }
        for(int i=0;i<ch2.length;i++){
            ch2[i]=b.charAt(i);
        }
        int i=ch1.length-1;
        int j=ch2.length-1;
        char char2='0';
        char tem='0';
        for(;i>=0;i--){
            char2='0';
            if(j>=0){
                char2=ch2[j];
            }
            if(tem=='0'){
                if(ch1[i]=='1'&&char2=='1'){
                    ch1[i]='0';
                    tem='1';
                }else if(ch1[i]=='0'&&char2=='1'){
                    ch1[i]='1';
                }
            }else if(tem=='1'){
                if(ch1[i]=='0'&&char2=='0'){
                    ch1[i]='1';
                    tem='0';
                }else if(ch1[i]=='1'&&char2=='1'){
                    j--;
                    continue;
                }else if(ch1[i]=='1'||char2=='1'){
                    ch1[i]='0';
                }
            }
            j--;
        }
        StringBuffer re=new StringBuffer();
        if(tem=='1'){
            re.append('1');
        }
        for(int d=0;d<ch1.length;d++){
            re.append(ch1[d]);
        }
        return re.toString();
    }   
}

 

Supongo que te gusta

Origin blog.csdn.net/weixin_43939602/article/details/114236772
Recomendado
Clasificación