Leet Code Add Binary

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".



实现二进制数相加,算法很简单就是两个String每位去相加,然后判断是否要进位。

一开始想到了一个不同的算法,即将两个String转为int型然后相加,然后判断每一位给出一个新的字符串。


可是,越写越多,遇到各种不同的问题,比如输入的二进制过长,于是改用大数。改了很渣的代码出来。

结果还是有一些条件没考虑到而WA,也罢懒得再想回归最初的简单思想。


WA代码:

public class solution {
	 public static String addBinary(String a, String b) {
	        String c="";
	        boolean flag = false;
	        BigInteger l1 = new BigInteger(a);
	        BigInteger l2 = new BigInteger(b);

	        l1=l1.add(l2);
	        if(l1.equals(BigInteger.ONE))
	        	return "1";
	        if(l1.equals(BigInteger.ZERO))
	        	return "0";

	        BigInteger k=BigInteger.TEN;
	        
	        //定义常量
	        BigInteger TWO = BigInteger.valueOf(2);
	        BigInteger THREE = BigInteger.valueOf(3);

	        while(!(l1.divide(k.divide(BigInteger.TEN)).equals(BigInteger.ZERO)))
	        {

	        	BigInteger temp = (l1.remainder(k)).divide(k.divide(BigInteger.TEN));
	            if(flag){
	            	temp.add(BigInteger.ONE);
	                flag=false;
	            }
	            
	            if(temp.equals(BigInteger.ZERO))
	            	c+="0";
	            else if(temp.equals(BigInteger.ONE))
	            {
	            	c+="1";
	            }

	            else if(temp.equals(TWO))
	            {
	            	  c+="0";
			          flag =true;
	            }

	            else if(temp.equals(TWO))
	            {
	            	 c+="1";
		             flag=true;
	            }
	  
	            k=k.multiply(BigInteger.TEN);
	        }
	        
	        if(flag)
	        	c+="1";
	        String res = "";
	        int len=c.length()-1;
	        for(;len>=0;len--)
	        {
	        	res+=c.charAt(len);
	        }
	        return res;
	    }
}


AC代码:


import java.math.*;
public class Solution {
    public String addBinary(String a, String b) {
		 String c="";
		 boolean flag = false;
		 int l1=a.length()-1;
		 int l2=b.length()-1;
		 for(;l1>=0||l2>=0;l1--,l2--)
		 {
			 int temp=0;
			 if(l1>=0&&l2>=0)	 
			 temp = a.charAt(l1)-'0' + b.charAt(l2) - '0';
			 else
				 if(l1<0)
					 temp = b.charAt(l2)-'0';
				 else
					 if(l2<0)
						 temp = a.charAt(l1)-'0';
			 
			 
			 if(flag){
				 temp =temp + 1;
				 flag = false;}
			 if(temp==0)
				 c+="0";
			 else
				 if(temp==1)
					 c+="1";
				 else
					 if(temp==2)
					 {	
						 c+="0";
						 flag = true;
					 }
					 else
						 if(temp==3)
						 {
							 c+="1";
							 flag = true;
						 }
			 }
		 	if(flag)
		 		c+="1";
	 		int len = c.length()-1;
	 		String res="";
	 		for(;len>=0;len--)
	 			res+=c.charAt(len);
	        return res;
	    }

}

总结:


在写代码之前,应该对你的算法有长远的认识,而不是编写编想这种目光短浅的做法。

或许,许多突如其来的BUG正是由此造成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值