分析
难度 易
来源
https://leetcode.com/problems/add-binary/description/
题目
Given two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters 1
or 0
.
Example 1:
Input: a = "11", b = "1"
Output: "100"
Example 2:
Input: a = "1010", b = "1011"
Output: "10101"
解答
1 package LeetCode; 2 3 public class L67_AddBinary { 4 private static String getSum(String a,String b){//a比b长 5 int len1=a.length(); 6 int len2=b.length(); 7 int[] res=new int[len1+1];//比a多一位,以备进位 8 StringBuilder str=new StringBuilder(); 9 //StringBuilder res=new StringBuilder(); 10 int flag=0;//表示进位 11 //int len=Math.min(len1,len2);//求和部分长度 12 for(int i=0;i<len2;i++){//求和部分长度 13 int aNum=a.charAt(len1-1-i)-'0';//从数字低位,即数组高位起逐位相加 14 int bNum=b.charAt(len2-1-i)-'0'; 15 int remainder=(aNum+bNum+flag)%2; 16 res[len1-i]=remainder; 17 flag=(aNum+bNum+flag)/2; 18 } 19 for(int i=0;i<len1-len2;i++){//与b求和后多余部分 20 int aNum=a.charAt(len1-len2-1-i)-'0';//从数字低位,即数组高位起逐位相加 21 int remainder=(aNum+flag)%2; 22 res[len1-len2-i]=remainder; 23 flag=(aNum+flag)/2; 24 } 25 if (flag==1){ 26 res[0]=1; 27 } 28 if (flag==1){ 29 str.append("1"); 30 for(int i=0;i<len1;i++){ 31 str.append(res[i+1]); 32 } 33 }else{ 34 for(int i=0;i<len1;i++){ 35 str.append(res[i+1]); 36 } 37 } 38 return str.toString(); 39 } 40 public String addBinary(String a, String b) { 41 int len1=a.length(); 42 int len2=b.length(); 43 if(len1>len2) 44 return getSum(a,b); 45 else 46 return getSum(b,a); 47 } 48 49 public static void main(String[] args){ 50 String a1="11"; 51 String b1="1"; 52 String a2="100"; 53 String b2="110010"; 54 L67_AddBinary l67=new L67_AddBinary(); 55 System.out.println(l67.addBinary(a2,b2)); 56 } 57 }
博客园的编辑器没有CSDN的编辑器高大上啊