[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();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_36869329/article/details/85221931