AI刷题:二进制之和 | 豆包MarsCode AI 刷题

82 阅读4分钟

问题描述

小U和小R喜欢探索二进制数字的奥秘。他们想找到一个方法,将两个二进制字符串相加并以十进制的形式呈现。这个过程需要注意的是,他们的二进制串可能非常长,所以常规的方法可能无法处理大数。小U和小R希望你帮助他们设计一个算法,该算法能在保证时间复杂度不超过O(n^2)的前提下,返回两个二进制字符串的十进制求和结果。


测试样例

样例1:

输入:binary1 = "101" ,binary2 = "110"
输出:'11'

样例2:

输入:binary1 = "111111" ,binary2 = "10100"
输出:'83'

样例3:

输入:binary1 = "111010101001001011" ,binary2 = "100010101001"
输出:'242420'

这一题读完感觉难度有点不对劲,先简单分析下,有以下几个关键点:

1.二进制字符串转十进制

2.有处理大数的需求

3.时间复杂度不超过O(n^2)

第一个要求想到Integer类方法,字符串转整型,同时有radix参数可以设置,直接调用就行

第二个要求应该是让我们用BigInteger,JAVA大数专用

第三个要求,如果手写代码会方便一点,我们直接调用可以去帮助文档看一下方法实现,但封装好的方法一般都是比较优越的。当然这并不绝对,比如快速幂这样的一些算法。最好还是看一下文档。

public static String solution(String binary1, String binary2) {
        // 1. 将两个二进制字符串转换为BigInteger
        BigInteger decimal1 = new BigInteger(binary1, 2);
        BigInteger decimal2 = new BigInteger(binary2, 2);
        // 2. 将两个BigInteger相加
        BigInteger sum = decimal1.add(decimal2);

        // 3. 将结果转换为字符串并返回
        return sum.toString();
    }

在豆包里直接问也会比较方便,例如下面的回答

Integer 类是 Java 中的一个包装类,用于将基本数据类型 int 封装成对象。它提供了许多有用的方法来操作和转换整数。以下是一些常用的 Integer 类方法:

常用方法

  1. parseInt(String s)

    • 将字符串参数解析为带符号的十进制整数。
    • 示例:int num = Integer.parseInt("123");
  2. parseInt(String s, int radix)

    • 将字符串参数解析为指定进制的整数。
    • 示例:int num = Integer.parseInt("101", 2); // 将二进制字符串 "101" 解析为十进制整数 5
  3. valueOf(String s)

    • 返回一个保存指定字符串值的 Integer 对象。
    • 示例:Integer num = Integer.valueOf("123");
  4. valueOf(String s, int radix)

    • 返回一个保存指定字符串值的 Integer 对象,字符串以指定进制表示。
    • 示例:Integer num = Integer.valueOf("101", 2); // 将二进制字符串 "101" 解析为十进制整数 5
  5. toString(int i)

    • 返回表示指定整数的 String 对象。
    • 示例:String str = Integer.toString(123);
  6. toString(int i, int radix)

    • 返回表示指定整数的 String 对象,整数以指定进制表示。
    • 示例:String str = Integer.toString(5, 2); // 将十进制整数 5 转换为二进制字符串 "101"
  7. toBinaryString(int i)

    • 返回表示指定整数的二进制字符串。
    • 示例:String str = Integer.toBinaryString(5); // 返回 "101"
  8. toHexString(int i)

    • 返回表示指定整数的十六进制字符串。
    • 示例:String str = Integer.toHexString(255); // 返回 "ff"
  9. toOctalString(int i)

    • 返回表示指定整数的八进制字符串。
    • 示例:String str = Integer.toOctalString(8); // 返回 "10"
  10. intValue()

    • 返回 Integer 对象的 int 值。
    • 示例:Integer num = 123; int value = num.intValue();
  11. compareTo(Integer anotherInteger)

    • 比较两个 Integer 对象的数值。
    • 示例:Integer num1 = 123; Integer num2 = 456; int result = num1.compareTo(num2); // 返回 -1
  12. equals(Object obj)

    • 比较 Integer 对象与指定对象是否相等。
    • 示例:Integer num1 = 123; Integer num2 = 123; boolean result = num1.equals(num2); // 返回 true
  13. MAX_VALUE

    • 表示 int 类型的最大值。
    • 示例:int max = Integer.MAX_VALUE; // 2147483647
  14. MIN_VALUE

    • 表示 int 类型的最小值。
    • 示例:int min = Integer.MIN_VALUE; // -2147483648

不得不说,豆包这些功能做的还是不错的,在学习上给了我们很大帮助。