Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
z这是一道简单题。
就是通过字符串的二进制相加返回字符串的二进制相加的结果。
我是单纯用网页写的,虽然简单,但是犯错了,Java基础太久没用忘了。
1.String中取某一个具体位置的字符是用a.charAt(intdex),不是a[index]也不是a.charat(index);
2.字符串的长度是a.length(),而不是a.length;
3.我使用0开始的下标遍历字符串,而提取字符串要从右往左,所以下标的位置是a.charAt(a.length()-index-1)而不是a.charAt(a.length()-index)
4.算法是先算出两者的公共部分,然后算出某一个字符串的单独部分,就是较长那个字符串多出来的部分。
这样子并不是结束了,在最后还要判断一下进位是否有,如果有的话,还有给结果字符串前面加‘1’;
这才算结束。
上代码
public class Solution {
public String addBinary(String a, String b) {
// return Integer.toBinaryString(Integer.parseInt(a,2)+Integer.parseInt(b,2));
String result="";
int strlen=0;
int isbig=0;
int alength=a.length(),blength=b.length();
for(;strlen<alength&&strlen<blength;++strlen){
if(isbig==1){
if(a.charAt(alength-strlen-1)=='1'&&b.charAt(blength-strlen-1)=='1')
{
result='1'+result;
isbig=1;
}
if(a.charAt(alength-strlen-1)=='0'&&b.charAt(blength-strlen-1)=='0')
{
result='1'+result;
isbig=0;
}
if(a.charAt(alength-strlen-1)=='1'&&b.charAt(blength-strlen-1)=='0'||a.charAt(alength-strlen-1)=='0'&&b.charAt(blength-strlen-1)=='1')
{
result='0'+result;
isbig=1;
}
}
else{
if(a.charAt(alength-strlen-1)=='1'&&b.charAt(blength-strlen-1)=='1')
{
result='0'+result;
isbig=1;
}
if(a.charAt(alength-strlen-1)=='0'&&b.charAt(blength-strlen-1)=='0')
{
result='0'+result;
isbig=0;
}
if(a.charAt(alength-strlen-1)=='1'&&b.charAt(blength-strlen-1)=='0'||a.charAt(alength-strlen-1)=='0'&&b.charAt(blength-strlen-1)=='1')
{
result='1'+result;
isbig=0;
}
}
}
if(strlen==alength){
for(;strlen<blength;++strlen){
if(isbig==1){
if(b.charAt(blength-strlen-1)=='1'){
result='0'+result;
isbig=1;
}
else{
result='1'+result;
isbig=0;
}
}else{
if(b.charAt(blength-strlen-1)=='1'){
result='1'+result;
isbig=0;
}
else{
result='0'+result;
isbig=0;
}
}
}
}
else{
for(;strlen<alength;++strlen){
if(isbig==1){
if(a.charAt(alength-strlen-1)=='1'){
result='0'+result;
isbig=1;
}
else{
result='1'+result;
isbig=0;
}
}else{
if(a.charAt(alength-strlen-1)=='1'){
result='1'+result;
isbig=0;
}
else{
result='0'+result;
isbig=0;
}
}
}
}
if(isbig==1)result='1'+result;
return result;
}
}