LeetCode:Add Binary

来源:互联网 发布:镜之边缘催化剂优化 编辑:程序博客网 时间:2024/06/05 10:52

推荐参照:Leetcode题目难度等级及面试频率总结

题目描述:

  Given two binary strings, return their sum (also a binary string).

  For example,a =”11”,b =”1”,Return”100”.

思路:

  本质和两个十进制数字相加类似,不同之处在于逢2进1。首先,将位数补齐,然后从最后一位开始向前相加。最后将结果反转即可。考虑到输入输出都是字符串形式,故使用StringBuilder,提高效率。注意最后判断进位位是否为1

附: StringBuilder的用法及String,StringBuffer与StringBuilder的区别

import java.util.*;public class Solution {    public String addBinary(String a, String b) {        StringBuffer sb = new StringBuffer();        int carry = 0;        while(a.length() != b.length()){            if(a.length() > b.length())                b = '0' + b;            else                a = '0' + a;        }        for(int i = a.length() - 1;i >= 0;i--){            int tempA = a.charAt(i) - '0';            int tempB = b.charAt(i) - '0';            int sum = tempA + tempB + carry;            if(sum < 2){                sb.append((char)(sum + '0'));                carry = 0;            }else {                sb.append((char)(sum - 2 + '0'));                carry = 1;            }        }        if(carry == 1)            sb.append('1');        return sb.reverse().toString();    }}

其实,也无需补0,将上面的代码稍微修改一下,运行时间提高1ms

import java.util.*;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();    }}

Any comments greatly appreciated.

0 0
原创粉丝点击