原題目鏈接:67. 二進制求和
題目描述:
給你兩個二進制字串,回傳它們的和(用二進制表示),
輸入為 非空 字串且只包含數字 1 和 0,
示例 1:
輸入: a = "11", b = "1"
輸出: "100"
示例 2:
輸入: a = "1010", b = "1011"
輸出: "10101"
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/add-binary
著作權歸領扣網路所有,商業轉載請聯系官方授權,非商業轉載請注明出處,
做題思路:
- 整體思路是將兩個字串較短的用 0 補齊,使得兩個字串長度一致,然后從末尾進行遍歷計算,得到最終結果
- 但是有一個問題,出現了求和之后,字串多了一個字符,例如 11 和 1 二進制相加,變成了 100 ,那么對于這種情況,我是采用反轉來進行處理
廢話不多說,直接上代碼,為了讓各位看官更能清晰理解,我的代碼寫得不精簡,我的代碼里加了大量的注釋,相信各位看官可以理解,如果我有些沒寫清楚或者寫錯的,可以評論區或者私信我喔
public String addBinary(String a, String b) {
//用于字串拼接
StringBuilder ans = new StringBuilder();
//判斷是否出現二進制
int he = 0;
//開始遍歷兩個字串,從最后一個字符開始遍歷
for(int i = a.length() - 1, j = b.length() - 1;i >= 0 || j >= 0; i--,j--){
//用于下次回圈是否出現二進制
int sum = he;
// 獲取字串a對應的某一位的值 當i<0是 sum+=0(向前補0) 否則取原值 ‘1’的char型別和‘0’的char型別剛好相差為1
//這里是利用了char型別的ASCII值
//如果這里不-'0',那sum加的值就變成了ASCII值,可能是48,也可能是49
sum += (i >= 0 ? a.charAt(i) - '0' : 0);
// 獲取字串b對應的某一位的值 當j<0是 sum+=0(向前補0) 否則取原值 ‘1’的char型別和‘0’的char型別剛好相差為1
sum += (j >= 0 ? b.charAt(j) - '0' : 0);
//開始拼接
//如果兩個數都是1,則拼接的是0,因為是二進制
ans.append(sum % 2);
//如果兩個數都是1,則要向前進1,那么下次回圈的時候he就把這個1加進去
he = sum / 2;
}
//回圈結束,可能出現多一位的情況,所以要進行判斷
ans.append(he == 1 ? he : "");
//反轉,這里要反轉是因為字串拼接是從后面開始的
//例如100和1,變成101+"",反轉后,還是101
//例如11和1,變成001,反轉后,變成100
//這就是反轉的意思所在
//并且變成String類,因為題目要求回傳String類
return ans.reverse().toString();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/265452.html
標籤:其他
上一篇:層次分析法(AHP)原理以及應用
下一篇:設計模式:七大原則
