剑指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
相关文章
|
9月前
|
Java
Java中整数(负数)的二进制表示
Java中整数(负数)的二进制表示
|
8月前
|
算法 Java Go
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
134 2
|
8月前
|
Java
剑指offer_3_前n个数字二进制形式中1的个数(java)
剑指offer_3_前n个数字二进制形式中1的个数(java)
|
8月前
|
Java
剑指offer_1_整数除法(java)
剑指offer_1_整数除法(java)
|
9月前
|
存储 安全 Java
剑指offer全集系列Java版本(2)
剑指offer全集系列Java版本(2)
54 0
|
9月前
|
存储 Java
剑指offer全集系列Java版本(1)
剑指offer全集系列Java版本(1)
58 0
|
9月前
|
算法 Java 数据处理
Java:将一个数转化为二进制
Java:将一个数转化为二进制
|
2天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
33 14
|
5天前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
34 13
|
6天前
|
安全 Java 开发者
【JAVA】封装多线程原理
Java 中的多线程封装旨在简化使用、提高安全性和增强可维护性。通过抽象和隐藏底层细节,提供简洁接口。常见封装方式包括基于 Runnable 和 Callable 接口的任务封装,以及线程池的封装。Runnable 适用于无返回值任务,Callable 支持有返回值任务。线程池(如 ExecutorService)则用于管理和复用线程,减少性能开销。示例代码展示了如何实现这些封装,使多线程编程更加高效和安全。

热门文章

最新文章