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();
}
}