`
huntfor
  • 浏览: 201303 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[leetcode]Add Binary

 
阅读更多

这个算法太。。蛋疼了,新博文地址:[leetcode]Add Binary

 

http://oj.leetcode.com/problems/add-binary/

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

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

 刚开始做这道题的时候,考虑的比较简单,首先将二进制字符串转换成int类型,然后将和再转换成字符串形式,然后就悲剧了,int类型溢出,手生了,忘了一个忌讳“整形操作可以转换为字符串操作,但是字符串操作往往不能转换为整形操作”,其实这道题是一道很简单的二进制加法的模拟,由于a,b的位数不一致,我们需要将低位对齐进行操作,这就需要将位数小的数高位补0,这是一件很蛋疼的事情,因为我们不放设法将a,b两个字符串进行转置。把低位放在字符串的前面,这样操作起来就方便多了。

 

代码如下:

public String addBinary(String a, String b) {
		StringBuilder aReverse = new StringBuilder(a).reverse();
		StringBuilder bReverse = new StringBuilder(b).reverse();
                //进行高位补0操作
		if (a.length() > b.length()) {
			for (int i = 0; i < a.length() - b.length(); i++) {
				bReverse.append("0");
			}
		} else {
			for (int i = 0; i < b.length() - a.length(); i++) {
				aReverse.append("0");
			}
		}
		int tem = 0;
		StringBuilder c = new StringBuilder();
		for (int i = 0; i < aReverse.length(); i++) {
			int sum = (aReverse.charAt(i) - '0') + (bReverse.charAt(i) - '0') + tem;
			if (sum < 2) {
				c.append(sum + "");
				tem = 0;
			} else {//else的情况有两种,sum = 2或3,这里一并处理了
				tem = 1;
				c.append(sum % 2 + "");
			}
		}
		if (tem == 1) {//最高位产生进位
			c.append("1");
		}
		return c.reverse().toString();
	}

 

分享到:
评论
2 楼 huntfor 2014-06-28  
249326109 写道
又搜到你的了,看了下开头的填翻转和填0有点蛋疼,倒着遍历不行么。。
http://www.cnblogs.com/jdflyfly/p/3812561.html

。。。。你妹啊,给个你的连接能死吗?
1 楼 249326109 2014-06-27  
又搜到你的了,看了下开头的填翻转和填0有点蛋疼,倒着遍历不行么。。
http://www.cnblogs.com/jdflyfly/p/3812561.html

相关推荐

    js-leetcode题解之67-add-binary.js

    javascript js_leetcode题解之67-add-binary.js

    67.addBinary.playground.zip

    标题中的“67.addBinary.playground.zip”表明这是一个与LeetCode第67题相关的Swift编程练习项目。LeetCode是一个在线平台,提供各种算法题目供程序员练习和提升编程技能。第67题通常指的是将两个二进制数相加的问题...

    LeetCode最全代码

    401 | [Binary Watch](https://leetcode.com/problems/binary-watch/) | [C++](./C++/binary-watch.cpp) [Python](./Python/binary-watch.py) | _O(1)_ | _O(1)_ | Easy | | 411 | [Minimum Unique Word ...

    leetcode卡-LeetCode:我的LeetCode解决方案

    Add Two Numbers], Linked list 2017.06.13 打卡[LeetCode 200. Number of Islands], BFS 2017.06.14 打卡[LeetCode 3. Longest Substring Without Repeating Characters], N/A 2017.06.15 打卡[LeetCode 407. ...

    Leetcode题目+解析+思路+答案.pdf

    - **Add Binary**:将两个二进制数相加。 - **Basic Calculator II**:实现一个基本计算器,读取一个表达式并返回计算结果。 本书通过实际编程案例,讲解了各种算法思想和技巧,涵盖了从基础的数据结构(如数组、...

    Leetcode book刷题必备

    根据提供的文件信息,我们能提炼出一系列IT相关知识点,主要是围绕LeetCode这本电子书的主题——即编程面试题目解答。此电子书内容丰富,涵盖了算法和数据结构中常见的问题及其解决方案,非常适合准备技术面试的读者...

    leetcode题目分类

    - Add Two Numbers(两数相加):以链表的形式表示两个非负整数,并将其相加。 - Longest Substring Without Repeating Characters(无重复字符的最长子串):找出无重复字符的最长子串的长度。 - Median of Two ...

    LeetCode leetcode部分题解答代码实现

    * Add Binary:给定两个二进制字符串,返回其和。这个题目需要使用数学的思想,将二进制字符串转换为整数,并返回其和。 * Basic Calculator II:给定一个字符串,返回其计算结果。这个题目需要使用数学的思想,将...

    _leetcode-python.pdf

    - Add Binary: 给定两个二进制字符串,返回它们的和。 - Text Justification: 给定一个单词数组和一个长度 maxWidth,设计一个方法使得每行中单词之间的空间均匀分配,并且左右两端对齐。 - Sqrt(x): 计算并返回x的...

    Leetcode答案(c++版)

    **1.1 Add Two Numbers (2)** - **问题描述**:给定两个非空链表来表示两个非负整数。数字最高位位于链表的首位。将这两个数字相加并返回一个新的链表。 - **解题思路**: - 使用一个临时变量记录进位值。 - 遍历...

    leetcode双人赛-leetcode-1:leetcode-1

    leetcode双人赛LeetCode ...AddBinary :简单的问题。 AddTwoNumbers :简单的问题。 Anagrams :简单的#hashtable问题。 BalancedBinaryTree :简单的#balance #tree问题。 BestTimetoBuyandSellStock :简单的问题。 ...

    leetcode中文版-leetcode:leetcode

    leetcode中文版车鸟 一组用python编写的算法。 种类 冒泡排序 插入排序 归并排序 桶排序 计数排序 基数排序 选择排序 快速排序 堆排序 搜索 二分查找 深度优先搜索 广度优先搜索 递归 json 漂亮的打印 过滤中文文件 ...

    lrucacheleetcode-LeetCode:LeetCode刷题

    两数相加(Add Two Numbers) 2018.9.25 翻转二叉树(Invert Binary Tree) 2018.9.25 环形链表(Linked List Cycle) 2018.9.25 环形链表 II(Linked List Cycle II) 2018.9.26 删除排序链表中的重复元素 II...

    leetcodepython001-LeetCode:力码

    leetcode ...Binary Linked-list 002 Add Two Numbers Stack 020 Valid Parenthesis Hash Table 001 TwoSum Reference 完整的学习流程 How to be a softwair engineer: 其他人详解 Python的各式演算法

    java-leetcode题解之第67题二进制求和.zip

    LeetCode的第67题,也被称为“Add Binary”,要求我们将两个非负整数表示为二进制字符串,然后将它们相加,返回结果的二进制形式。这个问题的核心在于理解二进制运算的规则,包括二进位的加法(0+0=0, 0+1=1, 1+0=1,...

    leetcode答案-ruby_leetcode:ruby_leetcode

    Programming),或是二分查找(Binary Search),或是回溯(Back tracing),或是分治法(Divide and Conquer),还有大量的对 树,数组、链表、字符串 和 hash 的操作。通过做这些题能让你对这些最基础的算法的思路...

    python-algorithm-templates:Python算法模板和LeetCode问题解决方案

    Algorithm templates and LeetCode SolutionsTBD Add multi binary search algorithm for leetcode0034 Add Segment Tree for data structure Add union-find algorithm(Disjoint Set Union) for data structure Add...

    leetcode中国-leetcode:leetcode刷题

    addBinary longestPalindrome maximal rectangle :dp问题,较难 largestRectangleArea 求直方图的最大面积,左右两次扫面+剪枝优化 Valid Parentheses 用栈判断括号匹配 Regular Expression Matching 递归匹配 ...

    lrucacheleetcode-leetcode:个人刷leetcode遇到的一些题汇总(golang)

    add-two-numbers find-peak-element longest-common-subsequence longest-consecutive-sequence max-area-of-island next-greater-element-ii serialize-and-deserialize-binary-tree subarray-sum-equals-k binary-...

Global site tag (gtag.js) - Google Analytics