我是靠谱客的博主 想人陪萝莉,最近开发中收集的这篇文章主要介绍67. 二进制求和 (位运算),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

LeetCode : 67. 二进制求和

在这里插入图片描述


本题大意: 给定两个二进制字符串 >> 计算相加后的二进制字符串

这题让我想到了一道用二进制计算的题目 (可互为变形吧 ??) >> 给定两个十进制数,不允许使用加法等运算符, 求和

位运算求和: 剑指 Offer 65. 不用加减乘除做加法

在这里插入图片描述



  1. 位运算
  2. 暴力模拟
  3. 先转为十进制 >> 十进制相加 >> 转二进制


位运算

java.lang.NumberFormatException:
For input string:
“10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101” under radix 2

I n t e g e r 和 L o n g Integer 和 Long IntegerLong 都存不下 二进制字符串的长度


// 要导 BigIntger 包
import java.math.BigInteger;

class Solution {

    public String addBinary(String a, String b) {
        // 可以存 500000001 位长度的二进制字符
        BigInteger c = new BigInteger(new BigInteger(a, 2).toString(10));
        BigInteger d = new BigInteger(new BigInteger(b, 2).toString(10));

        while (d.compareTo(new BigInteger("0")) != 0){
            BigInteger res = c.xor(d);  // 异或
            BigInteger carry = (c.and(d)).shiftLeft(1);  // and 左移
            c = res;
            d = carry;
        }

        return c.toString(2);
    }
}



在这里插入图片描述




暴力模拟

最朴素的方法: 就普通的十进制加法 >> 变成了满二进一


    public String addBinary(String a, String b) {
        StringBuffer c = new StringBuffer(a).reverse();
        StringBuffer d = new StringBuffer(b).reverse();
        int lenc = c.length(), lend = d.length();
        int i = 0;
        int k = 0;

        for (i = 0; i < lenc && i < lend ; i++) {
            // 满 2 进 1
            int temp = (c.charAt(i) - '0') + (d.charAt(i) - '0') + k;
            k = 0;
            if(temp >= 2) {
                temp = temp % 2;
                k = 1;
            }
            c.replace(i, i + 1, temp + "");
        }

        while (i < lenc){
            int temp = (c.charAt(i) - '0') + k;
            k = 0;
            if(temp >= 2){  temp = temp % 2; k = 1; }
            c.replace(i, i + 1, temp + "");
            i++;
        }

        while (i < lend){
            int temp = (d.charAt(i) - '0') + k;
            k = 0;
            if(temp >= 2){ temp = temp % 2; k = 1; }
            c.append(temp);
            i++;
        }

        if(k != 0) c.append(k);

        return c.reverse().toString();
    }



在这里插入图片描述






在这里插入图片描述

最后

以上就是想人陪萝莉为你收集整理的67. 二进制求和 (位运算)的全部内容,希望文章能够帮你解决67. 二进制求和 (位运算)所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部