(LeetCode 面试经典 150 题) 67. 二进制求和(位运算、字符串)
题目:67. 二进制求和
思路:位运算+字符串,时间复杂度0(n)。
C++版本:
class Solution {
public:string addBinary(string a, string b) {int lena=a.size(),lenb=b.size();string s="";int add=0;int i=lena-1,j=lenb-1;while(add!=0||i>=0||j>=0){if(i>=0){add+=a[i]-'0';i--;}if(j>=0){add+=b[j]-'0';j--;}s.push_back(add%2+'0');add>>=1;}reverse(s.begin(),s.end());return s;}
};
JAVA版本:
class Solution {public String addBinary(String a, String b) {StringBuilder s=new StringBuilder();int lena=a.length(),lenb=b.length();int add=0;int i=lena-1,j=lenb-1;while(add!=0 || i>=0 || j>=0){if(i>=0){add+=a.charAt(i)-'0';i--;}if(j>=0){add+=b.charAt(j)-'0';j--;}s.append((char)(add%2+'0'));add>>=1;}s.reverse();return s.toString();}
}
GO版本:
func addBinary(a string, b string) string {lena,lenb:=len(a),len(b)add:=0ans:=""i,j:=lena-1,lenb-1for add>0||i>=0||j>=0 {if i>=0 {add+=int(a[i]-'0')i--}if j>=0 {add+=int(b[j]-'0')j--}ans= strconv.Itoa(add%2) + ansadd>>=1;}return ans
}