您的位置:首页 > 其它

[leetcode]Add Binary

2015-11-21 00:04 411 查看
题目描述如下:

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:

java中反转字符串的方法(利用StringBuffer);

String.valueOf((char)(tmp + ‘0’))这里,要进行强制转换。

题目链接:https://leetcode.com/problems/add-binary/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: