LeetCode67-二进制求和(很长的水题)
Posted 朋友圈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode67-二进制求和(很长的水题)相关的知识,希望对你有一定的参考价值。
一眼就看出来肯定要溢出!
一次通过!而且是最优的方法
除了麻烦一点,没有太大的问题
主要是一次就能通过这么长的代码,我真的很强!
简洁是其次,代码最重要是易懂!
public String addBinary(String a, String b) { //反着存,到最后反转即可 StringBuilder result = new StringBuilder(); //不对0,长度不一样,那么是要从各自右边算起,而不是取一个值 boolean flag = false; int i = a.length()-1; int j = b.length()-1; //先加长度相同的部分 while(i>=0&&j>=0){ if(a.charAt(i)==\'1\'){ if(b.charAt(j)==\'0\'){ if(flag){ result = result.append(\'0\'); }else{ result = result.append(\'1\'); } }else { if(flag){ result = result.append(\'1\'); }else{ result = result.append(\'0\'); flag=true; } } }else{ if(b.charAt(j)==\'0\'){ if(flag){ result =result.append(\'1\'); flag=false; }else{ result = result.append(\'0\'); } }else{ if(flag){ result =result.append(\'0\'); }else{ result = result.append(\'1\'); } } } j--; i--; } //出来之后,看看谁还没加完 if(i<0&&j<0){ //不用管了,都ok了 }else if (i>=0){ //进位好烦 while(i>=0){ if(a.charAt(i)==\'1\'){ if(flag){ result = result.append(\'0\'); }else{ result = result.append(\'1\'); } }else{ if(flag){ result = result.append(\'1\'); flag=false; }else{ result = result.append(\'0\'); } } i--; } }else{ while(j>=0){ if(b.charAt(j)==\'1\'){ if(flag){ result = result.append(\'0\'); }else{ result = result.append(\'1\'); } }else{ if(flag){ result = result.append(\'1\'); flag=false; }else{ result = result.append(\'0\'); } } j--; } } //最后还有一个进位 if(flag){ result = result.append(1); } return result.reverse().toString(); }
以上是关于LeetCode67-二进制求和(很长的水题)的主要内容,如果未能解决你的问题,请参考以下文章