【剑指Offer(专项突破)】002. 二进制加法(Java实现) 详细解析
题目:
输入两个表示二进制的字符串,计算它们的和,并以二进制字符串的形式输出。例如,输入的二进制字符串分别是“11”和“10”,则输出“101”
leetcode题目连接:https://leetcode.cn/problems/JFETK5/
分析:
二进制加法可以参照十进制加法的竖式,右端对齐,满2进1
Java代码实现:
class Solution {public String addBinary(String a, String b) {StringBuilder result = new StringBuilder(); int i = a.length()-1;int j = b.length()-1;int carry = 0; //定义进位值while(i >= 0 || j >= 0){ //保证两个数都遍历到int digitA = i >= 0 ? a.charAt(i--) - '0':0; //当位数较短的那个数遍历完,i会变成-1,此时把-1位置的值当0处理int digitB = j >= 0 ? b.charAt(j--) - '0':0;//同上int sum = digitA + digitB + carry;carry = sum >= 2 ? 1 : 0; //若sum满2则进1,carry即为1,否则不进为0sum = sum >= 2 ? sum - 2 : sum; //sum满进2进1,即该位置sum-2result.append(sum); }if(carry == 1){result.append(1);}return result.reverse().toString(); //倒叙排列}
}
注意:
1、a.charAt(i--) - '0'作用是把字符型转化为int型
2、append()方法
StringBuffer类包含append()方法,append()方法相当于“+”,将指定的字符串追加到此字符序列;StringBuffer.append()追加的字符串在同一个内存地址
reverse()方法用于反转StringBuilder中的字符
复杂度分析:
时间复杂度:O(n)
空间复杂度:O(1)
结果:
以上为个人做题笔记,很多是自己的理解,若有错误还请各位大佬指出~
【剑指Offer(专项突破)】002. 二进制加法(Java实现) 详细解析相关推荐
- LeetCode刷题 _「剑指 Offer]专项突破版
第01天 整数 剑指 Offer II 001. 整数除法 class Solution:# 时间复杂度:O(logn), 空间复杂度:O(1)def divideCore(self, dividen ...
- 剑指Offer专项突破版(58)—— 日程表
题目 剑指 Offer II 058. 日程表 思路 假设现在已经有一堆互不冲突的日程了,此时需要新增一个日程k,其开始时间为start,结束时间为end,怎么判断是否和已有的日程冲突呢? 先考虑所有 ...
- 剑指offer 专项突破版 79、所有子集
题目链接 思路一:回溯 对于这种可以分为若干步,每一步有很多选择的题目非常适合用回溯法来做. 具体的方式为写一个helper函数,参数为当前的结果集合subset,当前选择的数字的索引index. 首 ...
- 剑指offer 专项突破版 74、合并区间
题目链接 思路 注意合并区间的规则是,对于有重合的区间直接合并(重合意味着某一个区间的头部在另一个区间之中) 所以我们可以先把区间按照区间头排序,然后再挨个判断是否重合~ 注意具体的写法 class ...
- 剑指offer 专项突破版 78、合并排序链表
题目链接 思路 最初的思路是上一题既然实现了归并两个链表,那么我们可以挨个归并~ 归并n-1次就可以,但是这样时间复杂度为O(k²n) class Solution {public ListNode ...
- 剑指offer 专项突破版 73、狒狒吃香蕉
题目链接 思路 这个也是范围内的查找,一开始可以确定狒狒的速度区间应该是[1,maxVal],但是有两个细节需要注意 如何通过piles数组和speed计算时间 result += (pile + s ...
- 剑指offer专项突破版
面试题1:整除除法 力扣连接:https://leetcode-cn.com/problems/xoh6Oh/submissions/ 题目描述 输入两个int型整数,它们进行除法计算并返回商,要求不 ...
- java 加法不用_【Java】 剑指offer(65) 不用加减乘除做加法
本文参考自<剑指offer>一书,代码采用Java语言. 题目 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.×.÷四则运算符号. 思路 对数字做运算,除了四则运算外,只剩下位 ...
- 【LeetCode】剑指 Offer 65. 不用加减乘除做加法
[LeetCode]剑指 Offer 65. 不用加减乘除做加法 文章目录 [LeetCode]剑指 Offer 65. 不用加减乘除做加法 一.位运算 一.位运算 本题考察对位运算的灵活使用,即使用 ...
最新文章
- Windows下Git的安装
- ylb:子查询(嵌套子查询)和子查询(相关子查询)
- CodeForces - 897E Willem, Chtholly and Seniorious(珂朵莉树)
- 二叉树题目----2 检查两颗树是否相同 和 对称二叉树的判定
- Linux串口编程详解
- H.264学习--1
- oracle乱码函数,jfinal oracle操作时decode函数填值乱码 求助什么原因????
- xlrd合并单元格的读取的注意事项
- 《那些年啊,那些事——一个程序员的奋斗史》——37
- rpm apache2 啟動vhost .htaccess讀取問題
- struts2+spring+hibernte整合示例
- 【python】导入自定义模块
- Mac系统用命令打开ping端口的方法
- vSphere配置NSX Edge网络
- Android实现记账本(麻雀虽小,五脏俱全)
- IDEA 奇淫 插件
- 2022年京东平台休闲食品的年度总销量超6亿件,同比增长6.5%
- 几何矩的物理意义,由Camshift算法引起
- 【蓝桥杯】【Python】次数差
- js 时间格式Wed Mar 22 13:38:37 CST 2022 转为yyyy-mm-dd