Uso pila y ha logrado una suma binaria sumador completo (JAVA)

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 1y 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();
    }
}
Liberadas nueve artículos originales · ganado elogios 2 · Vistas 320

Supongo que te gusta

Origin blog.csdn.net/Z_Pythagoras/article/details/83933931
Recomendado
Clasificación