Сложность: easy
Даны две двоичные строки a и b. Верните их сумму в виде двоичной строки.
Пример:
Input: a = "11", b = "1"
Output: "100"
👨💻 Алгоритм:
1⃣Начните с переноса carry = 0. Если в числе a наименьший бит равен 1, добавьте 1 к carry. То же самое относится к числу b: если в числе b наименьший бит равен 1, добавьте 1 к carry. В этот момент carry для наименьшего бита может быть равен 0 (00), 1 (01) или 2 (10).
2⃣Теперь добавьте наименьший бит carry к ответу и перенесите старший бит carry на следующий порядковый бит.
3⃣Повторяйте те же шаги снова и снова, пока не будут использованы все биты в a и b. Если остаётся ненулевой carry, добавьте его. Теперь переверните строку ответа, и задача выполнена.
😎 Решение:
class Solution {
public String addBinary(String a, String b) {
int n = a.length(), m = b.length();
if (n < m) return addBinary(b, a);
StringBuilder sb = new StringBuilder();
int carry = 0, j = m - 1;
for (int i = n - 1; i > -1; --i) {
if (a.charAt(i) == '1') ++carry;
if (j > -1 && b.charAt(j--) == '1') ++carry;
if (carry % 2 == 1) sb.append('1');
else sb.append('0');
carry /= 2;
}
if (carry == 1) sb.append('1');
sb.reverse();
return sb.toString();
}
}Ставь 👍 и забирай 📚 Базу знаний