方法一
转换成十进制数,求和之后再转换成二进制数
class Solution {
public String addBinary(String a, String b) {
return Integer.toBinaryString(
Integer.parseInt(a, 2) + Integer.parseInt(b, 2)
);
}
}
没考虑到一个大于0 一个小于零int tmp = (a[i]-‘0’) + (b[j]-‘0’)
String res = ‘’; error: empty character literal
方法二
B站讲解视频 和 力扣题解别人的答案 都用了这种方法,但目前已经超时。暂时还没找到可以执行的方法。
class Solution {
public String addBinary(String a, String b) {
StringBuffer res = new StringBuffer();
int carry = 0; //进位
int i = a.length() - 1;
int j = a.length() - 1;
while(i>=0 || j>=0 || carry!=0) {
if(i>=0) carry+=a.charAt(i)-'0';
if(j>=0) carry+=b.charAt(j)-'0';
res.insert(0, carry%2);
//res = String.valueOf(tmp%2)+res;
carry = carry/2;
}
return res.toString();
}
}
遗落知识点
字符串长度
字符串长度str.length()
string
- java中 string不可以看作数组
String是使用char数组来存储数据,并且是使用final修饰的,所以String的值一经定义是不可变的
- 访问string中某一个位置的字符 charAt
StringBuffer && StringBuilder
如果想要可变字符,使用StringBuilder(可变字符序列,效率高,线程不安全)、StringBuffer(可变字符序列,效率低,线程安全)
以StringBuffer为例。
-
public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
-
public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身