力扣 67 二进制求和
2020-08-12 本文已影响0人
zhaojinhui
题意:给定两个二进制字符串,求和
思路:遍历两个字符串
- 如果第一个字符穿没便利完,则carry加上第一个字符串当前位置的值,并把第一个字符串位置后移一位
- 第二个字符串同上
- carry%2加到结果字符串
- carry更新为carry/2
- 把结果stringbuilder反转,然后转化为string并返回
思想:字符串运算
复杂度:时间O(n),空间O(1)
class Solution {
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int carry = 0;
int len1 = a.length() - 1;
int len2 = b.length() - 1;
while(len1 >= 0 || len2 >= 0 || carry > 0) {
if(len1 >= 0) {
carry += a.charAt(len1--) - '0';
}
if(len2 >= 0) {
carry += b.charAt(len2--) - '0';
}
sb.append(carry%2);
carry /= 2;
}
return sb.reverse().toString();
}
}