`
frank-liu
  • 浏览: 1682186 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

leetcode: Add Binary

 
阅读更多

问题描述:

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

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

原问题链接:https://leetcode.com/problems/add-binary/

 

问题分析

  也是一个比较简单的问题,因为是要模拟两个字符串的二进制加法。所以需要每次从两个串的最后面开始往前加。关键是每次加的结果要保存到一个StringBuilder里面。同时要判断两个串长度不一样的情况。我们可以在一个循环里将它们的关系给概括出来。具体来说如下:

  当a, b都有元素的时候,它们相加的结果是 temp = charToInt(a.charAt(i)) + charToInt(b.charAt(j)) + carry. 当a或者b中间有一个已经先遍历完的时候,结果是 temp = charToInt(a.charAt(i)) + carry 或者 temp = charToInt(b.charAt(j)) + carry。其中carry表示进位。

  详细代码实现如下:

 

public class Solution {
    public String addBinary(String a, String b) {
        if(a.length() == 0 || a.equals("0")) return b;
        if(b.length() == 0 || b.equals("0")) return a;
        StringBuilder builder = new StringBuilder();
        int temp = 0, carry = 0;
        for(int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; i--, j--) {
            if(i >= 0 && j >= 0) {
                temp = charToInt(a.charAt(i)) + charToInt(b.charAt(j)) + carry;
            } else if(i >= 0) {
                temp = charToInt(a.charAt(i)) + carry;
            } else {
                temp = charToInt(b.charAt(j)) + carry;
            }
            builder.append(temp % 2);
            carry = temp / 2;
        }
        if(carry > 0) builder.append(carry);
        return builder.reverse().toString();
    }
    
    private int charToInt(char c) {
        return c - '0';
    }
}

 

1
1
分享到:
评论

相关推荐

    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中文版-leetcode:leetcode

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

    leetcode:Leetcode学习代码

    每个子文件或子目录可能会有一个特定的题目编号,例如 "001_two_sum.py" 或 "002_add_two_numbers.py",这些编号遵循了 LeetCode 题目的顺序。 在 LeetCode 上,题目通常分为几个主要类别: 1. **数组**:涉及数组...

    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...

    leetcode中国-leetcode:leetcode刷题

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

    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的各式演算法

    Leetcode:一些Leetcode解决方案

    3. **二叉树(Binary Trees)**:这类问题涉及到树的遍历、查找、构造等。在Java中,可以使用自定义类表示二叉树节点,并实现前序、中序、后序遍历。比如"二叉树的最大路径和",可以使用动态规划和递归相结合的方法...

    leetcode答案-ruby_leetcode:ruby_leetcode

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

    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-...

    LeetCode:LeetCode刷题

    例如,"两数相加"(Add Two Numbers)问题,需要将两个链表表示的数字相加。 3. **字符串(String)**:字符串处理涉及模式匹配、反转、子串查找等。例如,"无重复字符的最长子串"(Longest Substring Without ...

    leetcode中文版-LeetCode:LeetcodeC++/Java

    Add Two Numbers 两数相加 math 3 Longest Substring Without Repeating Characters 无重复字符的最长子串 string 4 LMedian of Two Sorted Arrays 两个排序数组的中位数 ary,binary search,dive and conquer 5 ...

    leetcode二维数组搜索-leetcode:C中一些算法问题的解决

    2_add_two_numbers.c : 两个数相加 3_solution.c : 无重复字符的最长子串 space_urlencode.c : 在 O(n) space_urlencode.c空间更改为“ ” ./two_dimension_binary_search.c : 二维排序数组中的二分查找 ./6_zigzag....

    javalruleetcode-leetcode:更多信息请访问Gitbook:https://wentao-shao.gitbook.io/

    java lru leetcode LeetCode ...Add Two Numbers Matrix Spiral Matrix Mergesort [Algorithm Swap](Mergesort/Algorithm swap.md) Numbers Queue Stack Toposort Trie Tree Two Pointers Union Find

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

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

    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-1:leetcode-1

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

    67.addBinary.playground.zip

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

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

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

    Leetcode book刷题必备

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

    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...

Global site tag (gtag.js) - Google Analytics