标签:Java offer int Offer isAdd lb ia sb ib
剑指 Offer II 002. 二进制加法
题目描述
给定两个 01 字符串 a
和 b
,请计算它们的和,并以二进制字符串的形式输出。
输入为 非空 字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "10"
输出: "101"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
提示:
每个字符串仅由字符 '0' 或 '1' 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 "0" ,就都不含前导零。
思路解析
1.这就是大数相加的思路
2.和小时候计算加法一样,从右往左进行竖位相加
3.如果有进位,就加一,如果超过2,那就保留一个进位给下一次用
4.使用StringBuilder进行存储字符串
代码实现
class Solution {
public String addBinary(String a, String b) {
if("0".equals(a)&&"0".equals(b)) return "0";
if("0".equals(a)||"0".equals(b)) return "0".equals(a)?b:a;
boolean isAdd = false;
char[] achars = a.toCharArray();
char[] bchars = b.toCharArray();
int la = achars.length-1;
int lb = bchars.length-1;
StringBuilder sb = new StringBuilder();
while(la>=0&&lb>=0) {
int ia = achars[la--]-'0';
int ib = bchars[lb--]-'0';
int iab = ia+ib;
if(isAdd) {
iab++;
isAdd = false;
}
if(iab>=2) {
iab-=2;
isAdd = true;
}
sb.insert(0,iab);
}
while(la>=0) {
int ia = achars[la--]-'0';
if(isAdd) {
ia++;
isAdd = false;
}
if(ia>=2) {
ia-=2;
isAdd = true;
}
sb.insert(0,ia);
}
while(lb>=0) {
int ib = bchars[lb--]-'0';
if(isAdd) {
ib++;
isAdd = false;
}
if(ib>=2) {
ib-=2;
isAdd = true;
}
sb.insert(0,ib);
}
if(isAdd) sb.insert(0,1);
return sb.toString();
}
}
欢迎大佬们关注小弟的博客https://blog.csdn.net/qq_41522089
标签:Java,offer,int,Offer,isAdd,lb,ia,sb,ib
来源: https://blog.csdn.net/qq_41522089/article/details/120385347
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。