剑指offer_2_二进制加法(java)

简介: 剑指offer_2_二进制加法(java)

一、问题描述

输入两个表示二进制的字符串,请计算它们的和,并以二进制字符串的形式输出。例如,输入的二进制字符串分别是"11"和"10",则输出"101"。

二、问题分析

计算二进制加,1+0=1 0+0=0 1+1=10,题目没有限制字符串长度,不能使用字符串转换为整数计算,会溢出;

关键处理好进位;

三、代码实现

  /**
     * 
     * @param str1 加数1
     * @param str2 加数2
     * @return
     */
    public static String addBinary(String str1, String str2) {
        StringBuffer res = new StringBuffer();
        //索引从0开始,最大索引为字符串长度减一
        int i = str1.length() - 1;
        int j = str2.length() - 1;
        //初始化进位
        int carry = 0;
        //遍历字符串
        while (i >= 0 || j >= 0) {
            //如果索引大于0,获取索引位置的字符串,并将索引--,负责用0补齐
            int digit1 = i >= 0 ? str1.charAt(i--) - '0' : 0;
            int digit2 = j >= 0 ? str2.charAt(j--) - '0' : 0;
            //获取索引位置两数和进位的和;
            int sum = digit1 + digit2 + carry;
            //和为2、3时,进位
            carry = sum >= 2 ? 1 : 0;
            //和大于2时,减去进位代表的数值
            sum = sum >= 2 ? sum-2 : sum;
            res.append(sum);
        }
        //检查进位是否为1,
        if(carry==1){
            //追加进位
            res.append(1);
        }
        //翻转字符串
        return res.reverse().toString();
    }

四、测试

System.out.println(addBinary("11","11")); //110
System.out.println(addBinary("10111","1")); //11000
System.out.println(addBinary("1","10111011")); //10111100
相关文章
|
3月前
|
Java Go 开发工具
【Java】(2)Java数据类型阐述、基本数据类型的占用和范围、二进制的讲述
数据的一种表示形式。十进制表示满十进一原则。二进制表示满二进一原则。例如:十进制例如:二进制计算机在任何情况下都只能识别二进制。
188 1
剑指offer_3_前n个数字二进制形式中1的个数(java)
剑指offer_3_前n个数字二进制形式中1的个数(java)
141 0
剑指offer_1_整数除法(java)
剑指offer_1_整数除法(java)
190 0
|
算法 Java Go
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
527 2
|
存储 安全 Java
剑指offer全集系列Java版本(2)
剑指offer全集系列Java版本(2)
153 0
|
存储 Java
剑指offer全集系列Java版本(1)
剑指offer全集系列Java版本(1)
136 0
Java中整数(负数)的二进制表示
Java中整数(负数)的二进制表示
|
运维 安全 Java
【方向盘】Java二进制和位运算,这一万字准能喂饱你(下)
【方向盘】Java二进制和位运算,这一万字准能喂饱你(下)
【方向盘】Java二进制和位运算,这一万字准能喂饱你(中)
【方向盘】Java二进制和位运算,这一万字准能喂饱你(中)
【方向盘】Java二进制和位运算,这一万字准能喂饱你(中)
|
算法 Java 程序员
【方向盘】Java二进制和位运算,这一万字准能喂饱你(上)
【方向盘】Java二进制和位运算,这一万字准能喂饱你(上)
【方向盘】Java二进制和位运算,这一万字准能喂饱你(上)