博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
67. Add Binary
阅读量:5259 次
发布时间:2019-06-14

本文共 3774 字,大约阅读时间需要 12 分钟。

题目:

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

For example,

a = "11"
b = "1"
Return "100".

链接:  

一刷,最简单的分两段计算。

class Solution(object):    def addBinary(self, a, b):        if not a:            return b        if not b:            return a                result = []        common_length = min(len(a), len(b))        carry = 0                for idx in range(1, common_length + 1):            carry, ret = (int(a[-idx]) + int(b[-idx]) + carry) / 2, (int(a[-idx]) + int(b[-idx]) + carry) % 2            result.append(str(ret))                rest = a if len(a) > common_length else b        for idx in range(common_length + 1, len(rest) + 1):            carry, ret = (int(rest[-idx]) + carry) / 2, (int(rest[-idx]) + carry) % 2            result.append(str(ret))                if carry:            result.append(str(carry))        result.reverse()        return ''.join(result)

一次遍历,可以减少边界条件的分析

class Solution(object):    def addBinary(self, a, b):        if not a:            return b        if not b:            return a                result = []        a_index = len(a) - 1        b_index = len(b) - 1        carry = 0                while a_index >= 0 or b_index >= 0:            a_val = int(a[a_index]) if a_index >= 0 else 0            b_val = int(b[b_index]) if b_index >= 0 else 0            carry, ret = (a_val + b_val + carry) / 2, (a_val + b_val + carry) % 2            result.append(str(ret))            a_index -= 1            b_index -= 1        if carry:            result.append(str(carry))        result.reverse()        return ''.join(result)

2/12/2017, Java, 无脑乱刷。非常需要改进

错误

1. StringBuilder的各种方法:setLength(), setCharAt(), append()

2. 判断第一次相加是否为0,初始条件判断缺失,不但在2个相加时,最后只剩下一个String的时候第一次也需要判断

3. char没有int(char)这种方法,只能通过char - '0'来判断

1 public class Solution { 2     public String addBinary(String a, String b) { 3         StringBuilder ret = new StringBuilder(); 4         ret.setLength(Math.max(a.length(), b.length())); 5         int sum; 6         int carry = 0; 7         int i = a.length() - 1, j = b.length() - 1; 8          9         for(;i >= 0 && j >= 0;i--, j--) {10             sum = a.charAt(i) - '0' + b.charAt(j) - '0' + carry;11             if (sum == 0) {12                 ret.setCharAt(Math.max(i, j), '0');13                 carry = 0;14             } else if (sum == 1) {15                 ret.setCharAt(Math.max(i, j), '1');16                 carry = 0;17             } else if (sum == 2) {18                 ret.setCharAt(Math.max(i, j), '0');19                 carry = 1;20             } else {21                 ret.setCharAt(Math.max(i, j), '1');22                 carry = 1;23             }24         }25         for(; i >= 0; i--) {26             sum = a.charAt(i) - '0' + carry;27             if (sum == 0) {28                 ret.setCharAt(i, '0');29                 carry = 0;30             } else if (sum == 1) {31                 ret.setCharAt(i, '1');32                 carry = 0;33             } else {34                 ret.setCharAt(i, '0');35                 carry = 1;                36             }37         }38         for(; j >= 0; j--) {39             sum = b.charAt(j) - '0' + carry;40             if (sum == 0) {41                 ret.setCharAt(j, '0');42                 carry = 0;43             } else if (sum == 1) {44                 ret.setCharAt(j, '1');45                 carry = 0;46             } else {47                 ret.setCharAt(j, '0');48                 carry = 1;                49             }50         } 51         if (carry != 0) {52             StringBuilder ret1 = new StringBuilder("1");53             ret1.append(ret);54             return ret1.toString();55         }56         return ret.toString();57     }58 }

 

转载于:https://www.cnblogs.com/panini/p/5582783.html

你可能感兴趣的文章
android permission
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
.net 文本框只允许输入XX,(正则表达式)
查看>>
android smack MultiUserChat.getHostedRooms( NullPointerException)
查看>>
03 线程池
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
jquery的contains方法
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
桥接模式-Bridge(Java实现)
查看>>
303. Range Sum Query - Immutable
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
前台freemark获取后台的值
查看>>
Spring-hibernate整合
查看>>
exit和return的区别
查看>>
Django 相关
查看>>
Python(软件目录结构规范)
查看>>
codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
查看>>
c++||template
查看>>
条件断点 符号断点
查看>>