【LintCode-408】二進位制求和(Java實現)
阿新 • • 發佈:2018-12-24
第一次程式碼記錄(不帶註釋版本):
public String addBinary(String a, String b) {
int alength=a.length();
int blength=b.length();
String result="";
int sum =0;
while(alength>=1||blength>=1){
if(alength>=1){
sum+=Integer.parseInt(a.substring(alength- 1,alength));
alength--;
}
if(blength>=1){
sum+=Integer.parseInt(b.substring(blength-1,blength));
blength--;
}
if(sum==2){
result="0"+result;
sum=1;
}else if(sum ==3){
result="1"+result;
sum=1;
}else{
result=sum+""+result;
sum=0;
}
}
if(sum==1){
result="1"+result;
}
return result;
}
第二次程式碼記錄(帶完整註釋版本):
public String addBinary(String a, String b) {
String result="";
//類似於前一章的carry進位狀態符
int sum=0;
int lengthA=a.length();
int lengthB=b.length();
while(lengthA>0||lengthB>0){
if(lengthA>0){
//擷取字串最後一位,類似獲取十進位制裡的個位
sum+=Integer.parseInt(a.substring(lengthA-1,lengthA));
lengthA--;
}
if(lengthB>0){
sum+=Integer.parseInt(b.substring(lengthB-1,lengthB));
lengthB--;
}
//當剛好滿足二進位制進位條件時
if(sum==2){
//相加剛好等於2,所以前一位剩餘0,類似於十進位制 4+6時,個位滿十進位,個位數值為0
result="0"+result;
//這裡重新賦予1,是指進位的那一個數值,所以前面程式碼是用 sum+= 而不是sum=
sum=1;
}else if(sum==3){
result="1"+result;
sum=1;
}else{
result=(sum+"")+result;
sum=0;
}
}
//用於處理最高位進位
if(sum==1){
result="1"+result;
}
return result;
}
個人解題思路:
模擬一遍二進位制求和的過程(詳細請看第二次程式碼註釋),需要注意 進位條件(sum=2、3)與 當a,b位數相同而且存在最高位需要進位時(例如“1”,“1”時)
如果您有更好的解法,歡迎您在留言區補充,感謝!!