剑指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
目录
相关文章
|
2月前
|
Java
Java中整数(负数)的二进制表示
Java中整数(负数)的二进制表示
|
2月前
|
Java
Java中将一个数转化为二进制
Java中将一个数转化为二进制
35 0
|
25天前
|
算法 Java Go
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
11 2
|
6天前
|
Java
剑指offer_3_前n个数字二进制形式中1的个数(java)
剑指offer_3_前n个数字二进制形式中1的个数(java)
9 0
|
6天前
|
Java
剑指offer_1_整数除法(java)
剑指offer_1_整数除法(java)
4 0
|
2月前
|
存储 安全 Java
剑指offer全集系列Java版本(2)
剑指offer全集系列Java版本(2)
17 0
|
2月前
|
存储 Java
剑指offer全集系列Java版本(1)
剑指offer全集系列Java版本(1)
25 0
|
2月前
|
算法 Java 数据处理
Java:将一个数转化为二进制
Java:将一个数转化为二进制
|
2月前
|
机器学习/深度学习 Java 程序员
Java基础之二进制,八进制,十进制,十六进制相互转换
Java基础之二进制,八进制,十进制,十六进制相互转换
|
2月前
|
算法 C++ Java
Java每日一练(20230423) 数组元素统计、杨辉三角II、二进制求和
Java每日一练(20230423) 数组元素统计、杨辉三角II、二进制求和
37 0
Java每日一练(20230423) 数组元素统计、杨辉三角II、二进制求和