力扣(LeetCode)二进制求和 个人题解
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
思路比较清晰,模拟汇编中二进制加法的做法,对缺位补0后,然后依次相加两数和CF进位标志位。
最后结束时,判断CF是否为1,为1代表最左边有进位,所以需要补1,如果没有则直接输出。
由于JAVA里INT类型到 CHAR类型或者STRING类型需要使用函数转换,要注意不要搞错了类型。
另外如果对空间比较敏感的,字符串补零的做法可以使用IF-ELSE解决。
代码如下:
class Solution { public String addBinary(String a, String b) { if (a.length() < b.length()) { String tmp = a; a = b; b = tmp; } String zeros = ""; for (int i = 0; i < a.length() - b.length(); i++) { zeros += "0"; } b = zeros + b; String ans = ""; int cf = 0; for (int i = a.length() - 1; i >= 0; i--) { int tmp = a.charAt(i) + b.charAt(i) - '0' - '0' + cf; if (tmp >= 2) { cf = 1; tmp -= 2; } else { cf = 0; } ans = String.valueOf(tmp) + ans; } if (cf == 1) ans = "1" + ans; return ans; } }