题目描述:
给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。
示例1:
输入: a = "11", b = "1" 输出: "100"
示例2:
输入: a = "1010", b = "1011" 输出: "10101"
题目难度:简单
分析:
简单题,不要用api…思路就是从最低位开始相加,遇2进1即可。
java:
class Solution { public String addBinary(String a, String b) { StringBuilder sb = new StringBuilder(); // 记录是否需要进位 int carry = 0; // n1,n2表示当前所处的位置下标 int n1 = a.length() - 1, n2 = b.length() - 1; while (n1 >= 0 || n2 >= 0) { // 用来记录临时数值 int tempA = 0; int tempB = 0; if (n1 >= 0) { // 把字符数字转换成int值 tempA = a.charAt(n1) - '0'; } if (n2 >= 0) { tempB = b.charAt(n2) - '0'; } 两位数字相加之和,以及当前的进位 int i = tempA + tempB + carry; // i的值可能是0、1、2、3,遇2写0进1,加上可能存在的进位 if (i > 1) { sb.append(i - 2); carry = 1; } else { sb.append(i); carry = 0; } // 下标减1,往高位走 n1--; n2--; } // 最后如果还有1位,需补上 if (carry > 0) { sb.append(1); } // 因为高位在后,所以需要翻转 return sb.reverse().toString(); } }
python:
class Solution: def addBinary(self, a: str, b: str) -> str: carry, res = 0, '' l1, l2 = len(a) - 1, len(b) - 1 while l1 >= 0 or l2 >= 0: // 注意这里需要提前定义变量 temp_a = temp_b = 0 if l1 >= 0: temp_a = int(a[l1]) if l2 >= 0: temp_b = int(b[l2]) sum = temp_a + temp_b + carry if sum > 1: res = str(sum - 2) + res carry = 1 else: res = str(sum) + res carry = 0 l1 -= 1 l2 -= 1 if carry > 0: res = str(carry) + res return res
总结:
如果直接用api就没意思了,也不是很难的题。