输入: a = "11", b = "1"
输出: "100"
二进制的规则是 1+1 = 10,这个 10可以看成是1 和0拼起来,关键就是这两个数怎么来怎么拼。
对应位置上的求和可以是
int sum = (int)(a.charAt(pa) - '0') + (int)(b.charAt(pb) - '0') + carries;
把它拆掉:一部分为二进制的结果(利用对2取余数 ,不是1就是0 ):rst = String.valueOf(sum%2)+rst
另一部分carries为进位。 便是对2取整数 carries = sum/2;
一开始以为这个-‘0’可以省略,如果省略了出来的是对应的ASCII码
一遍遍的循环上面这个过程,什么作为判断条件呢?输入string的长度。从最后一位开始往前面算。
这边需要先确定一下谁在上面(斜眼笑)
统一 一下:长的在上,短的在下。
这样就可能出现短的加光了。因此需要再加一个单独对长的进行运算。
以下是代码:
public class Solution {
public String addBinary(String a, String b) {
if(a.length() < b.length()){
String tmp = a;
a = b;
b = tmp;
}
int pa = a.length()-1;
int pb = b.length()-1;
int carries = 0;
String rst = "";