LeetCode 67二进制求和【简单】解题思路
几点细节注意
1 不要化成十进制求和再返回二进制,因为二进制String位数有可能非常多,没法进行计算,因此一位一位进行运算才行
2 String是无法用索引得到里面的字符的,要用charAt(index)方法
3 想要得到字符转int,用 (int)字符 - '0’即可, int可以不写, 字符遇到运算符自动变成int
思路
二进制运算,需要考虑字符串的运算顺序。两个字符串结尾开始运算,可以从末尾开始遍历两个字符串, 同时用一个临时变量存储是否进位,最后如果临时变量还要进位,就加一位。 通过新建StringBuilder 或者StringBuffer可以非常方便的进行头插insert(0, num),这样就省得append之后再reverse。最后记得转成字符串输出
class Solution {
public String addBinary(String a, String b) {
int i = a.length() - 1;
int j = b.length() - 1;
StringBuilder sb = new StringBuilder();
int cast = 0;
int num1;
int num2;
while(i >= 0 || j >=0){
if(i >= 0){
num1 = a.charAt(i) - '0';
i--;
}else{
num1 = 0;
}
if(j >= 0){
num2 = b.charAt(j) - '0';
j--;
}else{
num2 = 0;
}
if(num1 + num2 + cast > 1){
sb.insert(0, num1 + num2 + cast - 2);
cast = 1;
}else{
sb.insert(0, num1 + num2 + cast);
cast = 0;
}
}
if (cast == 1){
sb.insert(0, 1);
}
return sb.toString();
}
}