Uso pila y logró una suma binaria sumador completo (JAVA) (Leetcode 67)
Pila aplicación utilizando el orden inverso de la cadena binaria de entrada, cada uno usando un sumador para realizar una suma
Core sumador de código:
s = a ^ b ^ c; //求和结果
c = (a & b) | (a & c) | (b & c); //进位
suma binaria Leetcode: Tema
Dados dos cadena binaria, y el regreso a su (expresado en binario).
De entrada es no vacío cuerda y sólo contiene números 1
y 0
.
Ejemplo 1:
输入: a = "11", b = "1"
输出: "100"
Ejemplo 2:
输入: a = "1010", b = "1011"
输出: "10101"
código:
class Solution {
public String addBinary(String a, String b) {
Stack<Boolean> sa = new Stack<>();
Stack<Boolean> sb = new Stack<>();
for(char ch : a.toCharArray()) {
sa.push(ch == '1');
}
for(char ch : b.toCharArray()) {
sb.push(ch == '1');
}
Stack<Boolean> ans = new Stack<>();
boolean ta, tb, s, car = false;
while(true) {
if(!sa.isEmpty()) {
ta = sa.pop();
}
else {
ta = false;
}
if(!sb.isEmpty()) {
tb = sb.pop();
}
else {
tb = false;
}
s = ta ^ tb ^ car;
car = (ta & tb) | (ta & car) | (tb & car);
ans.push(s);
if(sa.empty() && sb.empty()) {
break;
}
}
if(car) {
ans.push(car);
}
StringBuilder res = new StringBuilder();
while(!ans.empty()) {
boolean tmp = ans.pop();
if(tmp) {
res.append('1');
}
else {
res.append('0');
}
}
return res.toString();
}
}