国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

[LeetCode] 67. Add Binary java

2019-11-06 06:19:19
字體:
來源:轉載
供稿:網友
/**67. Add Binary * @param a * @param b * @returnString 字符串模擬二進制位相加運算 */ public String addBinary(String a, String b) { if (a == null || a.length() ==0) return b; if (b == null || b.length() == 0) return a; String ret = ""; char add = '0'; int i=a.length()-1, j=b.length()-1; while (i>=0 && j>=0) { int sum = (a.charAt(i)-'0') + (b.charAt(j)-'0') + (add - '0'); if (sum >= 2) { add = '1'; String s = (sum-2)==0? "0" :"1"; ret = s+ret; } else { add = '0'; ret = String.valueOf(sum)+ret; } i--; j--; } while(i>=0) { int sum = (a.charAt(i)-'0') + (add - '0'); if (sum >= 2) { add = '1'; String s = (sum-2)==0? "0" :"1"; ret = s+ret; }else { add = '0'; ret = String.valueOf(sum)+ret; } i--; } while(j>=0) { int sum = (b.charAt(j)-'0') + (add - '0'); if (sum >= 2) { add = '1'; String s = (sum-2)==0? "0" :"1"; ret = s+ret; }else { add = '0'; ret = String.valueOf(sum)+ret; } j--; } if (add != '0') { ret = String.valueOf(add) + ret; } return ret; }

用add存儲每次相加時的進位 記得最后循環結束后,要再次加一次add

改進:

public String addBinary1(String a, String b) { int m = a.length(); int n = b.length(); int carry = 0; String res = ""; int maxLen = Math.max(m, n); for (int i = 0; i < maxLen; i++) { int p = 0, q = 0; if (i < m) p = a.charAt(m - 1 - i) - '0'; else p = 0; if (i < n) q = b.charAt(n - 1 - i) - '0'; else q = 0; int tmp = p + q + carry; carry = tmp / 2; res += tmp % 2; } return (carry == 0) ? res : "1" + res; }

二進制加法都是從最低位(從右加到左)。所以對兩個字符串要從最后一位開始加,如果遇見長度不一的情況,就把短的字符串高位補0. 每輪計算要加上進位,最后跳出循環后要堅持進位是否為1,以便更新結果。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永胜县| 曲麻莱县| 泾阳县| 建瓯市| 东乌珠穆沁旗| 南皮县| 临汾市| 武邑县| 新巴尔虎右旗| 丰县| 安塞县| 武宁县| 安塞县| 鸡东县| 自贡市| 紫阳县| 松江区| 奉新县| 建始县| 光山县| 衡阳县| 大田县| 安徽省| 基隆市| 温泉县| 马龙县| 鲁山县| 四平市| 东兰县| 锡林浩特市| 灯塔市| 苍溪县| 西林县| 沁源县| 湘潭市| 桓仁| 尼玛县| 富川| 陆河县| 柳州市| 洪雅县|