1. 程式人生 > >[leetcode]67. Add Binary

[leetcode]67. Add Binary

Solution 1

class Solution {
    public String addBinary(String a, String b) {
        int n=Math.max(a.length(),b.length());
        int[] nums=new int[n+1];
        
        //先把能對齊的部分加起來
        int i=n, p=a.length()-1, q=b.length()-1;
        for(;p>=0&&q>=0;i--, p--, q--){
             nums[i]=a.charAt(p)-'0'+(b.charAt(q)-'0');
        }
        //然後多出來的直接賦值
        if(p<0){
            for(int k=q;k>=0;k--,i--){
                nums[i]=b.charAt(k)-'0';
            }
        }
        else{
            for(int k=p;k>=0;k--,i--){
                nums[i]=a.charAt(k)-'0';
            }
        }

        //單獨處理進位,這裡nums0正好留出來,如果最高位需要進位的話
        for(int j=n;j>=1;j--){
            if(nums[j]>=2){
                nums[j-1]+=1;
                nums[j]=nums[j]%2;
            }
           
        }
        //轉換成字串
        String ans="";
        for(int j=0;j<=n;j++){
            if(j==0&&nums[j]==0)continue;
            ans+=String.valueOf(nums[j]);
        }
        
        
       return ans; 
    }
}

Solution 2:思路同我,別人的更加elegant的

public class Solution {
    public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        int i = a.length() - 1, j = b.length() -1, carry = 0;
        while (i >= 0 || j >= 0) {
            int sum = carry;
            if (j >= 0) sum += b.charAt(j--) - '0';
            if (i >= 0) sum += a.charAt(i--) - '0';
            sb.append(sum % 2);
            carry = sum / 2;
        }
        if (carry != 0) sb.append(carry);
        return sb.reverse().toString();
    }
}