1. 程式人生 > >【LintCode-408】二進位制求和(Java實現)

【LintCode-408】二進位制求和(Java實現)

這裡寫圖片描述
第一次程式碼記錄(不帶註釋版本):

    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”時)

如果您有更好的解法,歡迎您在留言區補充,感謝!!