题意:
给定两个用字符串表示的二进制数,返回他们的和。
方法一:
模拟
思路:直接模拟。
逆序遍历字符串,实现对应位的相加求和运算;
并对进位进行判断,追加字符给结果字符串;
最后,反转结果字符串即可。
class Solution { public: string binaryAdd(string A, string B) { int n1=A.size(),n2=B.size(); int flag=0;//进位标志 string res=""; for(int i=n1-1,j=n2-1;i>=0||j>=0;i--,j--){//逆向遍历 //计算求和 int t=flag; if(i>=0) t+=A[i]-'0'; if(j>=0) t+=B[j]-'0'; if(t>=2){//判断进位 flag=1; }else{ flag=0; } t%=2; res+=t+'0';//追加字符 } if(flag){//最后判断进位 res+='1'; } reverse(res.begin(),res.end());//反转结果字符串 return res; } };
时间复杂度:空间复杂度:
方法二:
java
思路:java实现逆序模拟。
思路与方法一相同。
注意点:答案字符串追加字符串需要强制类型转换。
import java.util.*; public class Solution { public String binaryAdd (String A, String B) { int n1=A.length(),n2=B.length(); int flag=0;//进位标志 StringBuffer res=new StringBuffer(""); for(int i=n1-1,j=n2-1;i>=0||j>=0;i--,j--){//逆向遍历 //计算求和 int t=flag; if(i>=0) t+=A.charAt(i)-'0'; if(j>=0) t+=B.charAt(j)-'0'; if(t>=2){//判断进位 flag=1; }else{ flag=0; } t%=2; res.append((char)(t+'0'));//追加字符 } if(flag==1){//最后判断进位 res.append('1'); } //反转结果字符串 return res.reverse().toString(); } }
时间复杂度:空间复杂度: