这是悦乐书的第157次更新,第159篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第16题(顺位题号是67)。给定两个二进制字符串,返回它们的总和(也是二进制字符串)。输入字符串都是非空的,只包含字符1或0。 例如:

输入:a =“11”,b =“1”

输出:“100”

输入:a =“1010”,b =“1011”

输出:“10101”

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

二进制数做加法时,是逢二进一,因为最后返回的是二进制字符串,所以可以不考虑溢出的风险。

先来运算一组简单的数据,使用提供的字符串“11”和“1”来演示。

“11”的最后一位是1,“1”的最后一位是1,两者相加等于2,此时两者的和的二进制字符串表示为“12”。因为逢二进一,所以最后一位变为0,向前进1,变成了“20”。同理,继续向前进1,此时二进制字符串变为了“100”,也就是我们最后要的结果。

依据上面的计算过程,我们可以分以下几个步骤来解题。

第一步,确定两个字符串长度中的最大值。因为要从后往前依次获取数字,循环的次数限制要以长度大的为准,长度小的默认是用0替代。定义一个变量carry存储上一次计算可能会遗留的值。创建一个StringBuilder对象,存储每次计算后要插入的字符串。

第二步,定义一个变量sum存储每次获得的数的和,初始值指向carry。分别获取两个字符串最后一位字符的整数,然后求和,对求得的和用2取余,然后将取余结果(0和1中的一个)插入第0个位置。

第三步,计算sum除以2的值,将其赋值给carry,接着循环第二步。

第四步,循环结束后,需要判断下carry是否等于0,因为carry最后一个计算sum/2得到的值有可能不等于0,如果不等于0,则将carry的值插入字符串第0个位置。

public String addBinary(String a, String b) {

int m = a.length();

int n = b.length();

int len = Math.max(m, n);

int carry = 0;

StringBuilder sb = new StringBuilder();

for (int i=0; i

int sum = carry;

int num = 0;

if (m-1-i >= 0) {

num = a.charAt(m-1-i)-'0';

}

int num2 = 0;

if (n-1-i >= 0) {

num2 = b.charAt(n-1-i)-'0';

}

sum += num + num2;

sb.insert(0, sum%2+"");

carry = sum/2;

}

if (carry != 0) {

sb.insert(0, carry+"");

}

return sb.toString();

}

03 第二种解法

对于第一种解法,可以适当再优化下,大体逻辑一致,不过在使用StringBuilder存储字符串的时候,使用的append方法,所以最后需要将其反转,才是最终我们需要的结果。

public String addBinary2(String a, String b) {

StringBuilder sb = new StringBuilder();

int i = a.length() - 1;

int j = b.length() -1;

int carry = 0;

while (i >= 0 || j >= 0) {

int sum = carry;

if (j >= 0) {

sum += b.charAt(j--) - '0';

}

if (i >= 0) {

sum += a.charAt(i--) - '0';

}

sb.append(sum % 2);

carry = sum / 2;

}

if (carry != 0) {

sb.append(carry);

}

return sb.reverse().toString();

}

04 小结

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

add binary java_LeetCode算法题-Add Binary(Java实现)相关推荐

  1. leetcode 用java_LeetCode算法题-Heaters(Java实现)

    这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...

  2. 【蓝桥杯算法题】用java遍写税收计算

    [蓝桥杯算法题]用java遍写税收计算 题目:劳务报酬税收计算:输入 m ,输出税后收入.如果 m <=800,不扣税, 如果800< m <=4000.则 m 减去800后的金额扣 ...

  3. min java_LeetCode算法题-Min Stack(Java实现)

    这是悦乐书的第177次更新,第179篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第36题(顺位题号是155).设计一个支持push,pop,top和在恒定时间内检索最小 ...

  4. largest number java_LeetCode算法题-Largest Number At Least Twice of Others(Java实现)

    这是悦乐书的第308次更新,第328篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第177题(顺位题号是747).在给定的整数数组中,总有一个最大的元素.查找数组中的最大 ...

  5. power of two java_LeetCode算法题-Power Of Two(Java实现)

    这是悦乐书的第194次更新,第200篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第56题(顺位题号是231).给定一个整数,写一个函数来确定它是否是2的幂.例如: 输入 ...

  6. magic square java_LeetCode算法题-Magic Squares In Grid(Java实现)

    这是悦乐书的第326次更新,第349篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第196题(顺位题号是840).3 x 3魔方是一个3 x 3网格,填充了从1到9的不同 ...

  7. island of java_LeetCode算法题-Island Perimeter(Java实现)

    这是悦乐书的第238次更新,第251篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第105题(顺位题号是463).您将获得一个二维整数网格形式的地图,其中1代表土地,0代 ...

  8. quadtree java_LeetCode算法题-Quad Tree Intersection(Java实现)

    这是悦乐书的第260次更新,第273篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第127题(顺位题号是558).四叉树是树数据,其中每个内部节点恰好有四个子节点:top ...

  9. quadtree java_LeetCode算法题-Construct Quad Tree(Java实现)

    这是悦乐书的第224次更新,第237篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第91题(顺位题号是427).我们想使用四叉树来存储N×N布尔网格.网格中的每个单元格只 ...

最新文章

  1. jquery 动态生成html后click事件不触发原因
  2. WebPart的三种部署方法
  3. 【性能优化】 之 10053 事件
  4. Jenkins持续集成——用户管理
  5. 联邦学习隐私保护研究进展
  6. HDOJ 4005-The war解题报告
  7. 在B站更新BV标识后,如何查看视频原AV号?
  8. ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
  9. codevs 2837 考前复习——01背包
  10. 128.3. Example 配置实例
  11. MongoDB的排除查询$ne缺陷
  12. 输出100之间的所有质数(素数)
  13. Windows7下载、安装、配置ADB的步骤
  14. matlab word 查找 词组,matlab搜索word文档
  15. 网站访问数据统计工具
  16. 软考中级哪一门比较好过?我建议你考这个。
  17. 数据分析三大神器之一:Numpy
  18. 安全设置 不允许 html,当前安全设置不允许该文件,教您当前安全设置不允许该文件怎么解决...
  19. 打印机连接计算机用什么端口,如何设置打印机端口,打印机端口设置的方法步骤...
  20. 什么是SQL注入式攻击 如何防范

热门文章

  1. SQL Server 2008用'sa'登录失败,启用'sa'登录的办法
  2. 屌丝逆袭高富帅之JAVA之路
  3. 服务器常用的端口及其用途
  4. 5种云计算安全基础知识和最佳实践
  5. 什么是物理层接口?—Vecloud 微云
  6. 教你如何使用EXCEL中的lookup函数(摘自“MS帮助和支持”)
  7. [ Python ] PIL
  8. python 的基础 学习 第七天 is id 编码的补充
  9. 图灵的秘密:他的生平、思想及论文解读pdf
  10. 机器学习降维方法总结