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就没意思了,也不是很难的题。

目录
相关文章
|
6月前
|
索引
【力扣刷题】两数求和、移动零、相交链表、反转链表
【力扣刷题】两数求和、移动零、相交链表、反转链表
48 2
【力扣刷题】两数求和、移动零、相交链表、反转链表
|
3月前
|
算法 Java
LeetCode第67题二进制求和
这篇文章是关于LeetCode第67题二进制求和的解题思路和代码实现的分享。作者通过分析题目要求和二进制加法的规则,提供了一个Java语言的解决方案,并在最后总结了二进制在算法中的重要性。
LeetCode第67题二进制求和
|
5月前
|
存储 SQL 算法
LeetCode题目67:二进制求和
LeetCode题目67:二进制求和
|
5月前
|
算法 Java Go
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
65 2
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
【经典LeetCode算法题目专栏分类】【第4期】BFS广度优先算法:单词接龙、最小基因变化、二进制矩阵中的最短路径
|
6月前
【力扣】67. 二进制求和
【力扣】67. 二进制求和
|
6月前
LeetCode[题解] 2864. 最大二进制奇数
LeetCode[题解] 2864. 最大二进制奇数
33 0
|
6月前
leetcode:190. 颠倒二进制位
leetcode:190. 颠倒二进制位
31 0
|
6月前
leetcode-1784:检查二进制字符串字段
leetcode-1784:检查二进制字符串字段
34 0
|
6月前
leetcode-67:二进制求和
leetcode-67:二进制求和
41 0