前言
今天的这道题《二进制求和》,难度还是简单层次,主要考察的是二进制的进位概念,搞清了基础理念,解题自然就不在话下了。
算法题:二进制求和
二进制求和这道题目,代码初始模板中给到了两个只包含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(); } }
执行结果
今天的执行结果还不错,主要是这道题早上就开始写,晚上才有时间坐下来写完他。
总结
今天这道题,主要还是关于二进制的概念,准确了解二进制的进位机制就可以通过逻辑解决这道题。