leetcode:67.二进制求和

简介: 简单题,不要用api…思路就是从最低位开始相加,遇2进1即可。

题目描述:


给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。


示例1:


输入: a = "11", b = "1"
输出: "100"


示例2:


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


题目难度:简单


分析:


简单题,不要用api…思路就是从最低位开始相加,遇2进1即可。


java:


class Solution {
    public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        // 记录是否需要进位
        int carry = 0;
        // n1,n2表示当前所处的位置下标
        int n1 = a.length() - 1, n2 = b.length() - 1;
        while (n1 >= 0 || n2 >= 0) {
          // 用来记录临时数值
            int tempA = 0;
            int tempB = 0;
            if (n1 >= 0) {
              // 把字符数字转换成int值
                tempA = a.charAt(n1) - '0';
            }
            if (n2 >= 0) {
                tempB = b.charAt(n2) - '0';
            }
            两位数字相加之和,以及当前的进位
            int i = tempA + tempB + carry;
            // i的值可能是0、1、2、3,遇2写0进1,加上可能存在的进位
            if (i > 1) {
                sb.append(i - 2);
                carry = 1;
            } else {
                sb.append(i);
                carry = 0;
            }
            // 下标减1,往高位走
            n1--;
            n2--;
        }
        // 最后如果还有1位,需补上
        if (carry > 0) {
            sb.append(1);
        } 
        // 因为高位在后,所以需要翻转
        return sb.reverse().toString();
    }
}


python:


class Solution:
    def addBinary(self, a: str, b: str) -> str:
        carry, res = 0, ''
        l1, l2 = len(a) - 1, len(b) - 1
        while l1 >= 0 or l2 >= 0:
          // 注意这里需要提前定义变量
            temp_a = temp_b = 0
            if l1 >= 0:
                temp_a = int(a[l1])
            if l2 >= 0:
                temp_b = int(b[l2])
            sum = temp_a + temp_b + carry
            if sum > 1:
                res =  str(sum - 2) + res
                carry = 1
            else:
                res = str(sum) + res
                carry = 0
            l1 -= 1
            l2 -= 1
        if carry > 0:
            res = str(carry) + res
        return res


总结:


如果直接用api就没意思了,也不是很难的题。

目录
相关文章
|
5月前
|
Java 编译器
LeetCode 190. 颠倒二进制位
LeetCode 190. 颠倒二进制位
21 0
【LeetCode-每日一题】-67. 二进制求和
【LeetCode-每日一题】-67. 二进制求和
|
2月前
LeetCode[题解] 2864. 最大二进制奇数
LeetCode[题解] 2864. 最大二进制奇数
11 0
|
4月前
leetcode:190. 颠倒二进制位
leetcode:190. 颠倒二进制位
12 0
|
4月前
leetcode-1784:检查二进制字符串字段
leetcode-1784:检查二进制字符串字段
17 0
|
4月前
leetcode-67:二进制求和
leetcode-67:二进制求和
23 0
|
4月前
leetcode-1582:二进制矩阵中的特殊位置
leetcode-1582:二进制矩阵中的特殊位置
20 0
|
4月前
leetcode-1545:找出第 N 个二进制字符串中的第 K 位
leetcode-1545:找出第 N 个二进制字符串中的第 K 位
20 0
|
4月前
|
Go
golang力扣leetcode 190.颠倒二进制位
golang力扣leetcode 190.颠倒二进制位
22 0
|
5月前
|
算法 Java 编译器
☆打卡算法☆LeetCode 190. 颠倒二进制位 算法解析
☆打卡算法☆LeetCode 190. 颠倒二进制位 算法解析