`

Leetcode - Add Binary

 
阅读更多
[分析]
从低位往高位逐位相加,就是这么一个简单的题却花了我一个多小时,无力骂自己了……
一开始想到用StringBuilder保存结果,但为了得到结果我需要每次将新算的一位insert到最前面,这样效率比较低,于是转而使用数组保存结果,数组预先开成两个字符串最大长度加1,这种coding起来其实很麻烦,要维护三个下标,很容易出错。
其实是对StringBuilder接口不熟,没有意识到它有reverse方法;
发现自己潜意识里有一口吃成胖子或者一步登天的想法,使用StringBuilder得到逆序结果就不行吗,自己再想办法逆成正确的呗;
小处的节省常常会让自己得不偿失,计算一位的结果时一开始想避免使用%,于是代码时这样的
sum.append(bitsum-2),正确的是sum.append(bitsum >= 2 ? (bitsum - 2) : bitsum)。
使用% 就不会犯这种貌似的失误,而且可读性强不是一点点,提交后发现运行时间更少(吃惊)
再说一次,先写对再优化

public class Solution {
    public String addBinary(String a, String b) {
        if (a == null || b == null)
            return a != null ? a : b;
        StringBuilder sum = new StringBuilder();
        int carry = 0;
        int i = a.length() - 1, j = b.length() - 1;
        while (i >= 0 && j >= 0) {
            int bitsum = a.charAt(i--) - '0' + b.charAt(j--) - '0' + carry;
            sum.append(bitsum % 2); 
            carry = bitsum / 2; 
        }
        while (i >= 0) {
            int bitsum = a.charAt(i--) - '0' + carry;
            sum.append(bitsum % 2); 
            carry = bitsum / 2; 
        }
        while (j >= 0) {
            int bitsum = b.charAt(j--) - '0' + carry;
            sum.append(bitsum % 2); 
            carry = bitsum / 2;
        }
        if (carry == 1)
            sum.append(1);
        return sum.reverse().toString();
    }
}
分享到:
评论

相关推荐

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

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

    _leetcode-python.pdf

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

    leetcode题库-LeetCode-Rust:听说刷题建repo是立flag一般的行为?

    leetcode题库 LeetCode-Rust 听说 LeetCode 添加了 Rust 支持, 这岂不是双倍的快(fu)乐(za)? 于是来体验一下 ...add_binary -- --nocapture Benchmark cargo bench --lib length_of_last_word -- --nocapture

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

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

    leetcode答案-LeetCode-Trip:LeetCode刷题代码,大佬勿入

    leetcode 答案 LeetCode-Trip LeetCode刷题代码,大佬勿入。 为一年后的研究生找工作...Binary Tree] [121. Best Time to Buy and Sell Stock] [167. Two Sum II - Input array is sorted] Medium [2. Add Two Numbers]

    leetcode-js:算法和数据结构是一个程序员的灵魂,LeetCode JavaScript TypeScript 题解

    67.二进制求和 (Add Binary) 69.x 的平方根 (Sqrt(x)) 70.爬楼梯 (Climbing Stairs) 83.删除排序链表中的重复元素 (Remove Duplicates from Sorted List) 88.合并两个有序数组 (Merge Sorted Array) 100.相同的树 ...

    Leetcode-Algorithm-Exercise

    Leetcode算法练习 Leetcode算法练习 ...MaximumSubarray 58_LengthOfLastWord 66_PlusOne 67_AddBinary 69_Sqrt(x) 70_ClimbStairs 83_RemoveDuplicatesFromSortedList 88_MergeSortedArray 100_SameT

    Leetcode的ac是什么意思-LeetCodeInJava:leetcode-java

    Leetcode的ac是什么意思 LeetCodeInJava List #98 Validate Binary Search Tree #100 Same Tree #104 Maximum Depth of Binary Tree #122 Best Time to Buy and Sell Stock II #136 Single Number #150 Evaluate ...

    LeetCode-NoteBook:docsifyjs

    LeetCode笔记本docsifyjsLeetCode算法Java c / c ++ javascript的基本知识简单的1. Two Sum 704. Classical Binary Search2. 3 Sum206. Reverse Linked List中等的33. Search in Rotated Sorted Array74. Search a ...

    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-Algos_Practice:来自Leetcode、HackerRank等网站的练习题

    “add_binary.py” - 以字符串的形式将两个二进制数作为输入,并将它们的总和作为字符串的输出返回。 “add_digits.py” - 递归添加数字的所有数字的算法。 “contains_duplicate.py” - 检查整数列表是否包含任何...

    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跳跃-Algorithm:算法学习,包括leetcode算法题,

    construct-binary-tree-from-preorder-and-inorder-traversal 无官方题解 106 construct-binary-tree-from-inorder-and-postorder-traversal 无官方题解 116 populating-next-right-pointers-in-eac

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

    serialize-and-deserialize-binary-tree subarray-sum-equals-k binary-tree-preorder-traversal n-queens-ii populating-next-right-pointers-in-each-node sum-root-to-leaf-numbers best-time-to-buy

    leetcode中国-leetcode:leetcode刷题

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

    leetcode答案-ruby_leetcode:ruby_leetcode

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

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

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

    leetcode338-MyLeetCode:我对LeetCode问题的解答

    王一飞的LeetCode题解 算法: | 问题 | 解决方案 | -----|---------------- | --------------- | 第344话| [ReverseString.cc] (./solutions/ReverseString.cc) | 第292话| [NimGame.cc] (./solutions/NimGame.cc) |...

    leetcode中文版-leetcode:leetcode

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

Global site tag (gtag.js) - Google Analytics