持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
前言
今天的这道题《二进制求和》,难度还是简单层次,主要考察的是二进制的进位概念,搞清了基础理念,解题自然就不在话下了。
算法题:二进制求和
二进制求和这道题目,代码初始模板中给到了两个只包含0和1的字符串。
这说明我们要针对字符串拿出每一位数字进行相加才对。
这里我的思路呢,是通过循环来解决的,从两个字符串的最后一位逐一向前求和。
循环体中以两个字符串的长度全部检索完视为结束。
保证每次值如果大于2时,则近一位,并且将多与2的值放入当前位置。
这里有一个特殊情况,那就是最后的位数可能比原有两个字符串最长的还要多一位。
所以要在循环之外,要做一次单独处理。
全程使用StringBuilder来进行拼接,这里考虑到append拼接字符串是向后拼接,所以使用了reverse方法进行倒置。
代码展示
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.addBinary("1010", "1011"));
}
public String addBinary(String a, String b) {
StringBuilder r = new StringBuilder();
int aL = a.length() - 1;
int bL = b.length() - 1;
int flag = 0;
while (aL >= 0 || bL >= 0){
int aI = 0;
if(aL >= 0){
aI = a.charAt(aL) - 48;
}
int bI = 0;
if(bL >= 0){
bI = b.charAt(bL) - 48;
}
int j = aI + bI + flag;
if(j >= 2){
r.append(j - 2);
flag = 1;
}else{
r.append(j);
flag = 0;
}
aL--;
bL--;
}
if(flag == 1){
r.append(flag);
}
return r.reverse().toString();
}
}
执行结果
今天的执行结果还不错,主要是这道题早上就开始写,晚上才有时间坐下来写完他。
总结
今天这道题,主要还是关于二进制的概念,准确了解二进制的进位机制就可以通过逻辑解决这道题。