力扣简单题,两个字符串型二进制数相加,计算相加结果输入字符结果
今天有空,打开力扣刷一刷题。先来个简单题,找点感觉。
下面是题目
这道题,一看第一想法就是,两个字符串编程字符数组,然后从后到前循环,aChar[i] + bChar[i] + flag flag 进位标志 会有 <2 =2 和 > 2 几种情况。
如果比较短的那个数组遍历完成之后,在同理在次基础上处理下剩余的部分。
public String addTwoNumber(String a , String b) {
char[] aChars = null;
char[] bChars = null;
//这里让固定让aChars存储最长的字符串数组,后面方便操作
if(a.length() > b.length()) {
aChars = a.toCharArray();
bChars = b.toCharArray();
} else {
aChars = b.toCharArray();
bChars = a.toCharArray();
}
int flag = 0;
int current =0;
StringBuffer res = new StringBuffer();
for (int i = 0; i < bChars.length; i++) {
int tmp = Integer.parseInt(bChars[bChars.length-i-1]+"") + Integer.parseInt(aChars[aChars.length-i-1]+"") + flag;
if( tmp < 2 ) {
flag = 0;
current = tmp;
}else if ( tmp == 2 ) {
flag = 1;
current = 0;
} else {
flag = 1;
current = 0;
}
res.append(current);
}
for( int j = aChars.length - bChars.length ; j >= 0;j--) {
int tmp = aChars[j]+flag;
if( tmp < 2 ) {
flag = 0;
current = tmp;
}else if ( tmp == 2 ) {
flag = 1;
current = 0;
} else {
flag = 1;
current = 1;
}
res.append(current);
}
if(flag == 1) res.append(1);
//反转一下字符串,输出结果
return res.reverse().toString();
}
输出结果
垃圾!!!
看了下官方题解,一行解决,nb 我!!!
public String addBinary(String a, String b) {
return Integer.toBinaryString(
Integer.parseInt(a, 2) + Integer.parseInt(b, 2)
);
}
于是决定优化一下,自己的垃圾代码
然后,把3ms优化成了16ms。md,但是好在自己写的这种方式,更加健壮,官方给的那个需要判断一下字符串长度。太长了不能转成parseInt。