【LeetCode】二進位制求和
阿新 • • 發佈:2018-12-09
給定兩個二進位制字串,返回他們的和(用二進位制表示)。
輸入為非空字串且只包含數字 1
和 0
。
示例 1:
輸入: a = "11", b = "1" 輸出: "100"
示例 2:
輸入: a = "1010", b = "1011" 輸出: "10101"
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); String str1=sc.next(); String str2=sc.next(); System.out.println(Solution.addBinary(str1,str2)); } } class Solution { public static String addBinary(String a, String b) { String res=""; //記錄結果 int sum=0; //記錄單個數位上的和 int lenA=a.length()-1; //串a的索引 int lenB=b.length()-1; //串b的索引 while (lenA>=0||lenB>=0) //當a串和b串都沒檢索到最首位,迴圈執行 { if (lenA>=0) //如果a串沒檢索到首位 { //記錄當前位的和(前一位的進位+a串當前位) sum+=Integer.parseInt(a.substring(lenA,lenA+1)); lenA--; //索引前移 } if (lenB>=0) { //記錄當前位的和(前一位的進位+a串當前位+b串當前位) sum+=Integer.parseInt(b.substring(lenB,lenB+1)); lenB--; //索引前移 } if (sum==0||sum==1)//如果前一位的進位+a串當前位+b串當前位=0或1,則不進位 { res=sum+res; sum=0; //進位置為0 } else if (sum==2)//如果前一位的進位+a串當前位+b串當前位=2,則進位 { res="0"+res;//當前位結果為0 sum=1; //進位置為1 } else if (sum==3)//如果前一位的進位+a串當前位+b串當前位=3,則進位 { res="1"+res;//當前位結果為1 sum=1; //進位置為1 } } if (sum==1) //如果最高位有進位1 res="1"+res; //則在結果最前面新增1 return res; } }
思路:從末尾數位開始加,如果當前位相加結果為0或1,則不存在進位,直接將當前位結果新增到結果串中;如果當前位結果為2,則有進位,將0新增到結果中,並記錄進位1;如果當前位結果為3,則有進位,將1新增到結果中,並記錄進位1;知道兩個串檢索完成,如還有進位,則在結果前新增1.