leetcode第一刷_Add Binary
阿新 • • 發佈:2017-06-04
lee 整數加法 代碼 統一處理 個數 推斷 solution urn int
二進制相加,本質上就是大整數加法,有關大整數加法我的舍友教過我一個非常好的方法,先用一個int數組保存結果,將兩個數相應位置相加,所有加完後。再統一處理進位的問題。這種方法相同適用於大整數的乘法。
這個題沒什麽特別的,註意一下進位別搞錯了即可了,還有事實上不用像我寫的這麽麻煩,能夠一開始先推斷哪個更長一些。交換一下。代碼會簡潔非常多。
class Solution { public: string addBinary(string a, string b) { int l1 = a.length(), l2 = b.length(); string c(max(l1, l2)+1, ‘0‘); int i1 = l1-1, i2 = l2-1, ch=0, k = max(l1, l2); while(i1>=0&&i2>=0){ if(a[i1] == ‘1‘ && b[i2] == ‘1‘){ c[k--] = ch+‘0‘; ch = 1; }else if(a[i1]==‘1‘||b[i2]==‘1‘){ if(ch){ c[k--] = ‘0‘; }else{ c[k--] = ‘1‘; } }else{ c[k--] = ‘0‘+ch; ch = 0; } i1--; i2--; } while(i1>=0){ if(ch){ if(a[i1] == ‘1‘){ c[k--] = ‘0‘; ch = 1; }else{ c[k--] = ‘1‘; ch = 0; } }else{ c[k--] = a[i1]; } i1--; } while(i2>=0){ if(ch){ if(b[i2] == ‘1‘){ c[k--] = ‘0‘; ch = 1; }else{ c[k--] = ‘1‘; ch = 0; } }else{ c[k--] = b[i2]; } i2--; } if(ch) c[0] = ‘1‘; if(c[0] == ‘0‘) c = c.substr(1, c.length()-1); return c; } };
leetcode第一刷_Add Binary