幸福的小骁仔的博客

不求闻达于诸侯,但求潜心做好技术

[leetcode]Add Binary

题目描述如下:

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

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

接到题目轻松+愉悦地写了第一版:

public String addBinary(String a, String b) {
        int res = BinaryToInt(a) + BinaryToInt(b);
        return Integer.toBinaryString(res);
    }
    public int BinaryToInt(String num){
        int res = 0;
        for(int i = 0; i < num.length(); i++){
            res += (Math.pow(2, i)) * (num.charAt(num.length() - i - 1) - '0');
        }
        return res;
    }

然后当然因为天真挂掉了。输入的参考数据位数远超一般的类型,所以很显然这是对字符串的操作。之所以把这段放上来,因为toBinaryString这个函数好神奇啊以前都不知道没用过(确定不是你水么= =…)。

既然是字符串的加减法,常规的方法就是反转一下字符串,然后加个carry位表示进位,加的时候先处理较短的字符串。附上代码:

public class Solution {
   public String addBinary(String a, String b) {
        a = reverseStr(a);
        b = reverseStr(b);
        String longerStr = a.length() > b.length() ? a : b;
        String shortterStr = a.length() > b.length() ? b : a;
        String res = "";
        int i, tmp, carry = 0;
        for(i = 0; i < shortterStr.length(); i++){
            tmp = shortterStr.charAt(i) - '0' + longerStr.charAt(i) - '0' + carry;
            if(tmp >= 2){
                tmp -= 2;
                carry = 1;
            }else{
                carry = 0;
            }
            res += String.valueOf((char)(tmp + '0'));
        }
        for(; i < longerStr.length(); i++){
            tmp = longerStr.charAt(i) - '0' + carry;
            if(tmp >= 2){
                tmp -= 2;
                carry = 1;
            }else{
                carry = 0;
            }
            res += String.valueOf((char)(tmp + '0'));
        }
        if(carry == 1) res += "1";
        return reverseStr(res);
    }
    public String reverseStr(String s){
            StringBuffer sb=new StringBuffer(s);
            sb.reverse();
            return sb.toString();
        }
}

两个地方mark:

  1. java中反转字符串的方法(利用StringBuffer);
  2. String.valueOf((char)(tmp + ‘0’))这里,要进行强制转换。

题目链接:https://leetcode.com/problems/add-binary/

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012505618/article/details/49955091
文章标签: leetcode
个人分类: leetcode
上一篇Android异步加载网络图片
下一篇[leetcode]Rotate Array
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭