0
点赞
收藏
分享

微信扫一扫

二进制加法---2022/03/08

文章目录

题目描述

给定两个 01 字符串 a 和 b ,请计算它们的和,并以二进制字符串的形式输出。输入为 非空 字符串且只包含数字 1 和 0。
题目来源

解题思路

代码实现

版本一:(未通过所有测试用例)

class Solution {
    public String addBinary(String a, String b) {

        
        char []tempa=a.toCharArray();
    	char []tempb=b.toCharArray();
    	long b2da=0,b2db=0;
    	long k=1,temp=0;
    	for(int i=tempa.length-1;i>=0;i--) {
    		temp=k*(tempa[i]-48);
    		b2da+=temp;
    		k+=k;
    	}
    	temp=0;
    	k=1;
    	for(int i=tempb.length-1;i>=0;i--) {
    		temp=k*(tempb[i]-48);
    		b2db+=temp;
    		k+=k;
    	}
    		
    	
		long sum=b2da+b2db;
        if(sum==0)return "0";
		long re=0;
		
		String result="";
		Stack<String> st=new Stack<String>(); 
		while(sum>0) {
			re=sum%2;
			st.push(String.valueOf(re));
			sum=sum/2;
		}
		while(!st.empty()) {
			result=result+st.pop();
		}

		return result;

    }
}

版本二:(通过所有测试用例)

class Solution {
    public String addBinary(String a, String b) {

        
       StringBuilder sb=new StringBuilder();
    	int i=a.length()-1;
    	int j=b.length()-1;
    	int re=0;
    	while(i>=0||j>=0||re!=0) {
    		int t1=i>=0?a.charAt(i--)-'0':0;
    		int t2=j>=0?b.charAt(j--)-'0':0;
    		re=t1+t2+re;
    		sb.append(re%2);
    		re/=2;
    	}

		return sb.reverse().toString();

    }
}

性能评估

在这里插入图片描述

每个人都不能一下子完成巨大的工作量,就像模拟寄存器一样,处理好当前的值,该进则进,步步前行。你会发现有一天,你也可以完成那看似不可能的事情。

举报

相关推荐

0 条评论