本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/40480151

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

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

通常情况下,我们会考虑使用现有的Interger.valueOf(String s, int radix)或者Long.valueOf(String s, int radix)直接进行转换,将二进制转换为十进制,相加后

再使用toBinaryString()方法转换为二进制数。

	private static String addBinary(String a, String b) {
		int x = Integer.valueOf(a, 2);
		int y = Integer.valueOf(b, 2);
		int z = x + y;
		String binaryString = Integer.toBinaryString(z);
		return binaryString;
	}
	private static String addBinary(String a, String b) {
		long x = Long.valueOf(a, 2);
		long y = Long.valueOf(b, 2);
		long z = x + y;
		String binaryString = Long.toBinaryString(z);
		return binaryString;
	}

但是,如果给定的字符串的长度大于int的最大值、long的最大值就会抛出java.lang.NumberFormatException异常。在给定了字符串的范围的情况下,可以考

虑使用上面的两种方法,那样效率会高一些。

如果不确定字符串的范围,最好使用下面的方法进行操作。

private static String addBinary(String a, String b) {
		/** i、j分别指向a、b的末尾字符 **/
		int i = a.length() - 1;
		int j = b.length() - 1;
		/** 进位标记 **/
		int carry = 0;
		/** 将String转为char数组 **/
		char[] achar = a.toCharArray();
		char[] bchar = b.toCharArray();
		/** 结果数组 **/
		char[] resultchar = new char[Math.max(achar.length, bchar.length) + 2];
		/** 标记结果数组位置 **/
		int resultIndex = 0;

		while (true) {
			if (i < 0 && j < 0 && carry == 0)
				break;

			int aflag = 0;
			int bflag = 0;

			if (i >= 0)
				aflag = achar[i] - '0';
			if (j >= 0)
				bflag = bchar[j] - '0';

			if (aflag + bflag + carry > 1) {
				resultchar[resultIndex] = (char) ('0' + aflag + bflag + carry - 2);
				carry = 1;
			} else {
				resultchar[resultIndex] = (char) ('0' + aflag + bflag + carry);
				carry = 0;
			}
			resultIndex++;
			i--;
			j--;
		}

		String result = new String(resultchar, 0, resultIndex);
		StringBuffer buffer = new StringBuffer(result);
		result = buffer.reverse().toString();

		return result;
	}

												

Leetcode_67_Add Binary的更多相关文章

  1. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  2. ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id

    出现场景:当点击"分类"再返回"首页"时,发生error退出   BUG描述:Caused by: java.lang.IllegalArgumentExcep ...

  3. Leetcode 笔记 110 - Balanced Binary Tree

    题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...

  4. Leetcode 笔记 99 - Recover Binary Search Tree

    题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...

  5. Leetcode 笔记 98 - Validate Binary Search Tree

    题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...

  6. Leetcode: Convert sorted list to binary search tree (No. 109)

    Sept. 22, 2015 学一道算法题, 经常回顾一下. 第二次重温, 决定增加一些图片, 帮助自己记忆. 在网上找他人的资料, 不如自己动手. 把从底向上树的算法搞通俗一些. 先做一个例子: 9 ...

  7. Leetcode, construct binary tree from inorder and post order traversal

    Sept. 13, 2015 Spent more than a few hours to work on the leetcode problem, and my favorite blogs ab ...

  8. [LeetCode] Binary Watch 二进制表

    A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom ...

  9. [LeetCode] Find Leaves of Binary Tree 找二叉树的叶节点

    Given a binary tree, find all leaves and then remove those leaves. Then repeat the previous steps un ...

随机推荐

  1. filter和listener的生命周期

    filter(过滤器)和listener(监听器)的生命周期 老实说 生命周期要是说成作用的时间范围我会理解的更好 filter package com.javaweb.filter; import ...

  2. ASP.NET Core 添加统一模型验证处理机制

    一.前言 模型验证自ASP.NET MVC便有提供,我们可以在Model(DTO)的属性上加上数据注解(Data Annotations)特性,在进入Action之前便会根据数据注解,来验证输入的数据 ...

  3. OpenSuSE Linux下安装Oracle10g的步骤

    OpenSuSE Linux下安装Oracle10g的步骤: --root用户 --1.vi etc/profile 添加脚本: if [ \$USER = "oracle" ]; ...

  4. CodeBlocks使用小技巧

    1.基本使用: CodeBlocks使用介绍 2.一定要建项目才能编译运行代码吗? 不一定,也可以直接新建文件,直接运行. 如何管理这些未纳入项目的文件?通过左侧Management面板,切换到Fil ...

  5. 20160225.CCPP体系详解(0035天)

    程序片段(01):CircleList.h+CircleList.c+main.c 内容概要:环形链表 ///CircleList.h #pragma once #include <stdio. ...

  6. 【java集合系列】--- LinkedList

    开篇前言--LinkedList中的基本用法 在前面的博文中,小编介绍List接口中的ArrayList集合,List这个接口,有两个实现类,一个就是ArrayList另一个是LinkedList(链 ...

  7. 拾遗与填坑《深度探索C++对象模型》3.3节

    <深度探索C++对象模型>是一本好书,该书作者也是<C++ Primer>的作者,一位绝对的C++大师.诚然该书中也有多多少少的错误一直为人所诟病,但这仍然不妨碍称其为一本好书 ...

  8. hive表的存储格式; ORC格式的使用

    hive表的源文件存储格式有几类: 1.TEXTFILE 默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理.源文件可以直接通过hadoop fs -cat 查 ...

  9. PHP 针对多用户 实现头像更换

    成品图 思路 登陆页面 表单制作 验证码制作 JavaScript刷新验证码 验证页面 验证逻辑 页面跳转 header函数 Meta标签 JavaScript 上传页面 个人主页 上传核心 最终结果 ...

  10. ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation

    ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中 ...