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正是由此造成。

时间: 2024-11-05 23:32:45

Leet Code Add Binary的相关文章

#Leet Code# Convert Sorted Array to Binary Search Tree

描述:递归 代码: 1 class Solution: 2 # @param num, a list of integers 3 # @return a tree node 4 def sortedArrayToBST(self, num): 5 if len(num) == 0: 6 return None 7 8 mid_index = len(num) / 2 9 10 tmp_tree = TreeNode(num[mid_index]) 11 tmp_tree.left = self.

LeetCode: Add Binary 解题报告

Add BinaryGiven two binary strings, return their sum (also a binary string). For example,a = "11"b = "1"Return "100". SOLUTION: 指针指到两个字符串的末尾,不断往前推进,用carry表示进位.用stringbuilder来记录结果. 使用insert(0, c)函数将加出的结果不断插入到STRINGBUILDER. 1 p

[lintcode easy]Add Binary

Add Binary Given two binary strings, return their sum (also a binary string).   Example a = 11 b = 1 Return 100 solution: 比较两个string的长度,将长读较小的string左边用0补齐. 设置进位标志flag.循环结束后如果进位标识大于0,则返回进位加上其他string:否则返回新string: char 0对应ASCII码表中30 1对应31....减去0所对应的值以后就

Leet Code OJ 119. Pascal&#39;s Triangle II [Difficulty: Easy]

题目: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3,3,1]. Note: Could you optimize your algorithm to use only O(k) extra space? 翻译: 给定一个下标k,返回第k行的杨辉三角. 例如给定k=3,返回[1,3,3,1]. 提示:你可以优化你的算法,让它只使用O(k)的额

Leet Code OJ 118. Pascal&#39;s Triangle [Difficulty: Easy]

题目: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Return [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 翻译: 给定一个数numRows,产生前numRows行的杨辉三角(即贾宪三角形.帕斯卡三角形). 分析: 除了每行首尾是1以外,其他元素均可由上行推出,本方案采用lastLine保存上行数

#Leet Code# Same Tree

语言:Python 描述:使用递归实现 1 # Definition for a binary tree node 2 # class TreeNode: 3 # def __init__(self, x): 4 # self.val = x 5 # self.left = None 6 # self.right = None 7 8 class Solution: 9 # @param p, a tree node 10 # @param q, a tree node 11 # @return

leetcode学习笔记:Add Binary

一.题目描述 Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1" Return "100". 二.解题技巧 这道题考察两个二进制数相加,考虑到输入的是两组string,同时注意在运算时从左到右分别是从低位到高位,因此需要考虑对输入进行翻转处理,中间二进制树相加部分没有过多的设计障碍,主要是计算进位:在两组数

【LeetCode】Add Binary

Given two binary strings, return their sum (also a binary string). For example,a = "11"b = "1"Return "100". public class Solution { public String addBinary(String a, String b) { if(a.equalsIgnoreCase("")||a==null) r

#Leet Code# Evaluate Reverse Polish Notation

描述:计算逆波兰表达法的结果 Sample: ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6 使用stack实现: 1 def is_op