一、问题描述

输入两个表示二进制的字符串,请计算它们的和,并以二进制字符串的形式输出。例如,输入的二进制字符串分别是"11"和"10",则输出"101"。

二、问题分析

计算二进制加,1+0=1 0+0=0 1+1=10,题目没有限制字符串长度,不能使用字符串转换为整数计算,会溢出;

关键处理好进位;

三、代码实现

 /*** * @param str1 加数1* @param str2 加数2* @return*/public static String addBinary(String str1, String str2) {StringBuffer res = new StringBuffer();//索引从0开始,最大索引为字符串长度减一int i = str1.length() - 1;int j = str2.length() - 1;//初始化进位int carry = 0;//遍历字符串while (i >= 0 || j >= 0) {//如果索引大于0,获取索引位置的字符串,并将索引--,负责用0补齐int digit1 = i >= 0 ? str1.charAt(i--) - '0' : 0;int digit2 = j >= 0 ? str2.charAt(j--) - '0' : 0;//获取索引位置两数和进位的和;int sum = digit1 + digit2 + carry;//和为2、3时,进位carry = sum >= 2 ? 1 : 0;//和大于2时,减去进位代表的数值sum = sum >= 2 ? sum-2 : sum;res.append(sum);}//检查进位是否为1,if(carry==1){//追加进位res.append(1);}//翻转字符串return res.reverse().toString();}

四、测试

System.out.println(addBinary("11","11")); //110
System.out.println(addBinary("10111","1")); //11000
System.out.println(addBinary("1","10111011")); //10111100

剑指offer_2_二进制加法(java)相关推荐

  1. 剑指offerII002.二进制加法

    class Solution {public:string addBinary(string a, string b) {string res;int carry = 0;int i = a.size ...

  2. 剑指Offer第二版Java代码实现

    剑指Offer第二版Java代码实现 A.单例模式 面试题 2:实现Singleton模式 B.面试需要的基础知识 面试题 3:数组中重复的数字 面试题 4:二维数组的查找 面试题 5:替换空格 面试 ...

  3. 【剑指Offer(专项突破)】002. 二进制加法(Java实现) 详细解析

    题目: 输入两个表示二进制的字符串,计算它们的和,并以二进制字符串的形式输出.例如,输入的二进制字符串分别是"11"和"10",则输出"101&quo ...

  4. 剑指Offer系列(java版,详细解析)38.字符串的排列

    题目描述 剑指 Offer 38. 字符串的排列 难度中等237收藏分享切换为英文接收动态反馈 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元 ...

  5. 剑指Offer字符串加法问题

    1.题目描述 输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果.要求程序尽可能的高效.示例如下: /** * @param a ...

  6. 剑指Offer全题解—Java版本

    1.数组中重复的数字 题目描述 数组中重复的数字 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任 ...

  7. 剑指offer 二进制1中的个数

    算法-求二进制数中1的个数 问题描述 任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4 这也是一道比较经典的题目了, ...

  8. 剑指offer刷题(java)|二维数组中的查找|替换空格|leetcode刷题

    文章目录 前言 一.二维数组中的查找 题目 题解一 题解二 题解三 二.替换空格 题目 题解一 题解二 题解三 前言 本文主要是写了我做算法题的思路以及对其他优秀题解的自我理解. 一.二维数组中的查找 ...

  9. 二进制加法java实现

    class Solution {//大致思路是参照十进制的加法来做,先将两个数末尾对其逐个加逐个进位public String addBinary(String a, String b) {Strin ...

最新文章

  1. 使用Vant框架的组件van-pull-refresh搭配van-list和van-card完成上滑加载更多列表数据,下拉刷新当前列表数据(等同于翻页功能)
  2. mysql show作用_MySQL show的用法
  3. Packet Tracer 思科模拟器之交换机配置快速生成树协议(RSTP)
  4. 利用均差的牛顿插值法(Newton)
  5. java中访问修饰符_Java中的访问修饰符介绍
  6. Java并发--ConcurrentModificationException(并发修改异常)异常原因和解决方法
  7. Delphi XE7 下载 安装序列号 破解
  8. 3dmax高级建模方法总结
  9. html 设置整体字体,html font标签如何设置字体样式
  10. iqos烟弹哪个最好抽?我品尝了十一种电子烟烟弹后告诉你
  11. 从sk_buff中的线性区与非线性区到 bpf_skb_pull_data
  12. java对接微信支付收不到支付通知问题(亲身实践)
  13. 2019 年最佳 Linux 笔记本电脑发行版 top10
  14. html文档半结构化数据,什么是半结构化数据?
  15. 政治冲刺押题所有“黑幕”!只用肖四肖八行吗?
  16. 百度-视觉技术部招聘计算机视觉相关算法实习生
  17. 微信小程序 03 数据劫持代理和事件绑定
  18. P2P流媒体直播的疑问
  19. R 安装 “umap-learn“ python 包
  20. DEI1016BD429使用遇到的问题及解决

热门文章

  1. Ubuntu16 搜狗拼音安装
  2. 华容一中高考2021成绩查询,岳阳市2021届高三化学复习研讨会在华容一中举行
  3. matplotlib:实现中文“宋体”,英文“Times New Rom”
  4. 【连载】【FPGA黑金开发板】NIOS II那些事儿--串口实验(六)
  5. 用计算机管理人事档案,医院人事档案的计算机管理与应用
  6. 神经网络数学建模怎么算,神经网络数学建模论文
  7. 达梦数据库数据守护集群搭建(命令行方式)
  8. 培训出来的外包码农一般工资多少
  9. 淘宝开放平台是什么?与淘宝API 接口区别
  10. (入门题)题目 1486: 一元一次方程