问题描述
小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 类方法:
常用方法
-
parseInt(String s)- 将字符串参数解析为带符号的十进制整数。
- 示例:
int num = Integer.parseInt("123");
-
parseInt(String s, int radix)- 将字符串参数解析为指定进制的整数。
- 示例:
int num = Integer.parseInt("101", 2); // 将二进制字符串 "101" 解析为十进制整数 5
-
valueOf(String s)- 返回一个保存指定字符串值的
Integer对象。 - 示例:
Integer num = Integer.valueOf("123");
- 返回一个保存指定字符串值的
-
valueOf(String s, int radix)- 返回一个保存指定字符串值的
Integer对象,字符串以指定进制表示。 - 示例:
Integer num = Integer.valueOf("101", 2); // 将二进制字符串 "101" 解析为十进制整数 5
- 返回一个保存指定字符串值的
-
toString(int i)- 返回表示指定整数的
String对象。 - 示例:
String str = Integer.toString(123);
- 返回表示指定整数的
-
toString(int i, int radix)- 返回表示指定整数的
String对象,整数以指定进制表示。 - 示例:
String str = Integer.toString(5, 2); // 将十进制整数 5 转换为二进制字符串 "101"
- 返回表示指定整数的
-
toBinaryString(int i)- 返回表示指定整数的二进制字符串。
- 示例:
String str = Integer.toBinaryString(5); // 返回 "101"
-
toHexString(int i)- 返回表示指定整数的十六进制字符串。
- 示例:
String str = Integer.toHexString(255); // 返回 "ff"
-
toOctalString(int i)- 返回表示指定整数的八进制字符串。
- 示例:
String str = Integer.toOctalString(8); // 返回 "10"
-
intValue()- 返回
Integer对象的int值。 - 示例:
Integer num = 123; int value = num.intValue();
- 返回
-
compareTo(Integer anotherInteger)- 比较两个
Integer对象的数值。 - 示例:
Integer num1 = 123; Integer num2 = 456; int result = num1.compareTo(num2); // 返回 -1
- 比较两个
-
equals(Object obj)- 比较
Integer对象与指定对象是否相等。 - 示例:
Integer num1 = 123; Integer num2 = 123; boolean result = num1.equals(num2); // 返回 true
- 比较
-
MAX_VALUE- 表示
int类型的最大值。 - 示例:
int max = Integer.MAX_VALUE; // 2147483647
- 表示
-
MIN_VALUE- 表示
int类型的最小值。 - 示例:
int min = Integer.MIN_VALUE; // -2147483648
- 表示
不得不说,豆包这些功能做的还是不错的,在学习上给了我们很大帮助。