leetcode004:add binary

莫非深夜真的coder最有灵感的时候?

题目:

/**
	 * Given two binary strings, return their sum (also a binary string).
	 * For example,
	 * a = "11"
	 * b = "1"
	 * Return "100".
	 * */
思路:

1.当字符串有一个为空或者为0时,相当于答案取决于另一个

2.如果字符串a、b相等,相当于*2 那么就是左移一位

3.String转字符串数组,比较长短(考虑到最后一位可能进位,因此用stringbuffer顺序保存,再reverse)

遍历长数组,从尾部开始与短数组比较,并且定义一变量保存进位;

当两位字符相同时,结果取决于进位,而当前进位值取决于该字符值;

当两位字符不同时,结果取决于进位与'1'的想加,而进位值保持不变

                 只剩下长数组时,其实我想是否可以判断进位是否为'0',如果是,则长数组剩下部分不需要改动;

 否则需要进位//这部分还没去认真想

public class AddBinary {
	
	 public String addBinary(String a, String b) {
	        // Start typing your Java solution below
	        // DO NOT write main() function
		   if("".equals(a)||"0".equals(a)){//一个为0或者为空的情况
			   return ("".equals(b))?"0":b;
		   }
		   if("".equals(b)||"0".equals(b)){
			   return ("".equals(a))?"0":a;
		   }
		   if(a.equals(b)){//两个相等直接左移
			   return (a+"0");
		   }
		   int llength = a.length();
		   int slength = b.length();//感觉这两个变量应该优化的
		   StringBuffer sb = new StringBuffer();
		   char[] achars =null;//命名有问题,其实代表最长
		   char[] bchars=null;
		   if(llength>=slength){
			 	achars = a.toCharArray();
			 	bchars = b.toCharArray();
		   }else{
			   achars = b.toCharArray();
			   bchars = a.toCharArray();
		   }
		   char c='0';//因为开始时放在for里面,导致忽略了c是char而声明成了int出了不少错
		 		for(int i=achars.length-1,j=bchars.length-1;i>=-1;i--){//考虑最后进位
		 			if(j>-1){//一长一短,短的没遍历完前
			 			if(achars[i]==bchars[j]){//两个数相等,必然要么进1要么不进,结果取决于进位值
			 				sb.append(c);
			 				c = achars[i];//既然相等,那都为1时必然进位
			 			}else{
			 				sb.append(c=='0'?'1':'0');//不相等时,肯定是有个1的,然后跟进位想加,所以结果取决于c,而进位不变
			 			}
			 			j--;
		 			}else if(i>=0&&achars[i]=='0'){//剩下的长的,能优化不?
		 				sb.append(c);
		 				c = '0';
		 			}else if(i>-1){
		 				sb.append(c=='0'?'1':'0');
		 			}else{
		 				if(c=='1'){
		 					sb.append('1');
		 				}
		 			}
		 		}
	        return sb.reverse().toString();//倒转再转string
	    }
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		AddBinary ab = new AddBinary();
		ab.addBinary("1010", "1011");
		ab.addBinary("11", "1");
	}

}

昨晚睡前草稿想到了算法,今晚晚回来,先游戏一下,然后看了下kobe的视频,所以晚了,编完码刚调试,尼玛就已经整点了,坑爹啊,然后坚持到debug成功为止。顺便写下blog,这个应该可以优化下,明天再想想。官网运行结果图:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值