Leecode67_addBinary

Leecode 67
给你两个二进制字符串,返回它们的和(用二进制表示),输入为 非空 字符串且只包含数字 1 和 0。
例如:

输入: a = "1010", b = "1011"
输出: "10101"

方法一:直接库函数,python或者java有直接的库可以调用
代码:

# python
class Solution:
    def addBinary(self, a, b) -> str:
        return '{0:b}'.format(int(a, 2) + int(b, 2))
# java
class Solution {
  public String addBinary(String a, String b) {
    return Integer.toBinaryString(Integer.parseInt(a, 2) + Integer.parseInt(b, 2));
  }
}

方法二:如果你选择用c++,那么需要直接实现,这里用另外一种直观的方法,从字符串的末尾开始加,用一个数纪录是否进位,直到全部遍历结束。
代码:

std::string Leecode67_addBinary(std::string a, std::string b) {
	 int n = a.length(), m= b.length();
	 if (n < m) return Leecode67_addBinary(b, a);
	 int L = std::max(n, m);
	 std::string sb("");
	 int carry = 0, j = m - 1;
	 for (int i = L - 1; i > -1; --i) {
		 if (a[i] == '1') ++carry;
		 if (j > -1 && b[j--] == '1') ++carry;
		 if (carry % 2 == 1) sb += "1";
		 else sb += '0';
		 carry /= 2;
	 }
	 if (carry == 1) sb += "1";
	 std::reverse(sb.begin(),sb.end());
	 return sb;
 }

因为是从后往前加的,最后的字符加在了字符串的最前面,故最后答案需要反一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值