【两个字符串型二进制数相加】
力扣简单题,两个字符串型二进制数相加,计算相加结果输入字符结果
今天有空,打开力扣刷一刷题。先来个简单题,找点感觉。
下面是题目
这道题,一看第一想法就是,两个字符串编程字符数组,然后从后到前循环,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。
下一篇:
剩余定理(孙子定理)