题目描述
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例:
输入: a = "11", b = "1" 输出: "100"
思路
1.可以将两个字符串从末尾开始相加,中途使用一个标识位表示进位即可。
2.由于两个字符串的长度可能不同,所以我们应该在循环结束后,再将长的那个字符串进一步与结果进行相加。
Java代码实现
public String addBinary(String a, String b) { int len1 = a.length()-1; int len2 = b.length()-1; StringBuffer stringBuffer = new StringBuffer(); int ans = 0; while(len1>=0 && len2>=0){ int cur = Integer.parseInt(String.valueOf(a.charAt(len1--)))+Integer.parseInt(String.valueOf(b.charAt(len2--)))+ans; ans = cur/2; stringBuffer.insert(0,cur%2); } while(len1>=0){ int cur = Integer.parseInt(String.valueOf(a.charAt(len1--)))+ans; ans = cur/2; stringBuffer.insert(0,cur%2); } while(len2>=0){ int cur = Integer.parseInt(String.valueOf(b.charAt(len2--)))+ans; ans = cur/2; stringBuffer.insert(0,cur%2); } if(ans>0) stringBuffer.insert(0,1); return stringBuffer.toString(); }
Golang代码实现
func addBinary(a string, b string) string { res := "" l1 := len(a)-1 l2 := len(b)-1 ans := 0 for l1 >= 0 || l2 >=0 { num1 := 0 num2 := 0 if l1 >= 0 && l2 >= 0{ num1,_ = strconv.Atoi(a[l1:l1+1]) num2,_ = strconv.Atoi(b[l2:l2+1]) l1-- l2-- }else if l1 >= 0 && l2 < 0{ num1,_ = strconv.Atoi(a[l1:l1+1]) l1-- }else if l1 < 0 && l2 >= 0{ num2,_ = strconv.Atoi(b[l2:l2+1]) l2-- } res = strconv.Itoa((num1+num2+ans)%2) + res ans = (num1+num2+ans)/2 } if ans == 1{ res = "1" + res } return res }