面试150 二进制求和 位运算

Problem: 67. 二进制求和
面试150 二进制求和 位运算_第1张图片

文章目录

  • 思路
  • 复杂度
  • Code

思路

‍ 参考
面试150 二进制求和 位运算_第2张图片

复杂度

时间复杂度: O ( n ) O(n) O(n)

空间复杂度: O ( n ) O(n) O(n)

Code

class Solution {
	public String addBinary(String a, String b)
	{
		StringBuilder ans = new StringBuilder();
		int carry = 0;// 记录进位
		for (int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; i--, j--)
		{
			int sum = carry;// 加上进位
			sum += i >= 0 ? a.charAt(i) - '0' : 0;// 加上 a 的当前位,没有就补 0
			sum += j >= 0 ? b.charAt(j) - '0' : 0;// 加上 b 的当前位,没有就补 0
			ans.append(sum % 2);// 添加到尾部
			carry = sum / 2;// 向上进位
		}
		ans.append(carry == 1 ? carry : "");// 处理最后一个可能的进位
//		翻转后即是结果
		return ans.reverse().toString();
	}
}

你可能感兴趣的:(面试150,面试,职场和发展)