【leetcode刷题笔记】Add Binary

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

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


 

题解:简单的二进制加法模拟。a,b的最后以为对齐开始进行加法,用carries保存进位,如果加完后最高位还有进位,那么要在结果的最前面加一个1。

代码如下:

复制代码
 1 public class Solution {
 2     public String addBinary(String a, String b) {
 3         if(a == null || a.length() == 0)
 4             return b;
 5         if(b == null || b.length() == 0)
 6             return a;
 7         
 8         String s = new String();
 9         int carries = 0;
10         int a_kepeler = a.length()-1;
11         int b_kepeler = b.length()-1;
12         
13         while(a_kepeler >= 0 && b_kepeler >= 0){
14             int sum = carries + a.charAt(a_kepeler) - '0' + b.charAt(b_kepeler) - '0';
15             carries = sum / 2;
16             sum = sum % 2;
17             s = String.valueOf(sum) + s;
18             a_kepeler--;
19             b_kepeler--;
20         }
21         
22         while(a_kepeler >= 0){
23             int sum = carries + a.charAt(a_kepeler) - '0';
24             carries = sum / 2;
25             sum = sum % 2;
26             s = String.valueOf(sum) + s;
27             a_kepeler--;
28         }
29         
30         while(b_kepeler >= 0){
31             int sum = carries + b.charAt(b_kepeler) - '0';
32             carries = sum / 2;
33             sum = sum % 2;
34             s = String.valueOf(sum) + s;
35             b_kepeler--;
36         }
37         
38         if(carries > 0)
39             s = "1" + s;
40         
41         return s;
42     }
43 }
复制代码

上述代码还可以优化,就是如果a的长度小于b,就把a,b交换,使得a总是较长的那个,那么就可以省略第30~36行的while循环了。

posted @   SunshineAtNoon  阅读(182)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示