我是靠谱客的博主 沉默哈密瓜,最近开发中收集的这篇文章主要介绍LeetCode之二进制字符串相加,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

刚开始刷leetcode,第一道题是给两个二进制的字符串,求这两个二进制相加以后的和,输出当然也是二进制的格式了。以下是题目:

/**
 * Given two binary strings, return their sum (also a binary string).
 * 
 * For example, a = "11" b = "1" Return "100".
 */

解决这个问题,首先要自己模拟出二进制相加时的运算过程,首先计算的肯定是0号位,就是按照二进制中8,4,2,1这样排列时的最后一个。即首先计算a的最末位1和b的最末位1。1+1=2,在二进制计算中,应该表示为10,其中1是要进位的,即和两个二进制的1号位相加。
计算过程如下图(原谅我的灵魂画风。。):
二进制计算
具体代码如下:

public class AddBinary {
    public static String addBinary(String a, String b) {
        int i = a.length() - 1;
        int j = b.length() - 1;
        int da = 0;
        int db = 0;
        int adv = 0;
        StringBuffer result = new StringBuffer();
        while (i >= 0 && j >= 0) {
            da = a.charAt(i--) == '0' ? 0 : 1;
            db = b.charAt(j--) == '0' ? 0 : 1;
            int d = da + db + adv;
            result.append(d % 2 == 0 ? '0' : '1');
            adv = d >> 1;
        }
        if (i >= 0) {
            while (i >= 0) {
                da = a.charAt(i--) == '0' ? 0 : 1;
                int d = da + adv;
                result.append(d % 2 == 0 ? '0' : '1');
                adv = d >> 1;
            }
        } else if (j >= 0) {
            while (j >= 0) {
                db = b.charAt(j--) == '0' ? 0 : 1;
                int d = db + adv;
                result.append(d % 2 == 0 ? '0' : '1');
                adv = d >> 1;
            }
        }
        if (adv == 1) {
            result.append('1');
        }
        return result.reverse().toString();
    }
    public static void main(String args[])
    {
        String consult=addBinary("11","1");
        System.out.print("consult is "+consult);
    }

}

首先获取二进制字符串的最后一位,相加,比如da=1,db=1,adv表示的是进位,所以刚开始adv初始为0,每次二进制位相加时就是da+db+adv,第一次运算过程就是d=1+1+0=2,但在实际算的过程中,结果的最后一位表示为0,所以代码中让取 d% 2 == 0 ? ‘0’ : ‘1’,此时进位为1,也就是d向右移一位,2向右移一位就是1啦,这样就得出了进位adv,到下次运算时,adv与二进制数一起相加。第二步是1号位相加,由于a有1号位,而b只有0号位,所以跳出while循环,在下一次计算中只有a的1号位和进位adv,如此循环往复即可。到最后,如果还有进位,代码处理的也很巧妙,直接在result结果后追加“1”。到最后把result转置即可。
题目很简单,讲的很啰嗦,其实只看代码就能看懂

最后

以上就是沉默哈密瓜为你收集整理的LeetCode之二进制字符串相加的全部内容,希望文章能够帮你解决LeetCode之二进制字符串相加所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部