• 【技巧】Leetcode 67. 二进制求和【简单】


    二进制求和

    • 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

    示例 1:

    输入:a = “11”, b = “1”
    输出:“100”

    示例 2:

    输入:a = “1010”, b = “1011”
    输出:“10101”

    解题思路

    逐位相加再进位:

    • 从字符串的末尾开始逐位相加。每次从 a 和 b 中取出当前位,如果某个字符串已经遍历完则认为该位为0。计算当前位的和(包括进位)。

    Java实现

    public class AddBinary {
    
        public String addBinary(String a, String b) {
            StringBuilder result = new StringBuilder();
            int i = a.length() - 1, j = b.length() - 1, carry = 0;
    
            while (i >= 0 || j >= 0) {
                //值
                int sum = carry;
                if (i >= 0) sum += a.charAt(i--) - '0';
                if (j >= 0) sum += b.charAt(j--) - '0';
                result.append(sum % 2);
                //进位
                carry = sum / 2;
            }
    
            if (carry != 0) result.append(carry);
    
            return result.reverse().toString();
        }
    
        // 测试用例
        public static void main(String[] args) {
            AddBinary solution = new AddBinary();
            System.out.println(solution.addBinary("11", "1")); // 期望输出: "100"
            System.out.println(solution.addBinary("1010", "1011")); // 期望输出: "10101"
        }
    }
    
    

    时间空间复杂度

    • 时间复杂度:O(max(m, n)),其中 m 和 n 分别是字符串 a 和 b 的长度。需要遍历较长的字符串。
    • 空间复杂度:O(max(m, n)),用于存储结果的 StringBuilder。
  • 相关阅读:
    Pytorch实现深度学习常见问题
    C++菜鸟日记1
    ps2023最新版免费滤镜插件Exposure安装下载教程
    MySQL【子查询】
    mac安装jenkins
    智慧工地施工如何应用室内定位uwb技术
    OS复习笔记ch11-3
    凉鞋的 Unity 笔记 204. 语句
    [AI Google] Google I/O 2024: 为新一代设计的 I/O
    自定义pycharm的debug控件
  • 原文地址:https://blog.csdn.net/FLGBgo/article/details/139674125