leetcode-第67题-二进制求和

力扣 第415题 字符串相加 与 第67题 二进制求和 力扣 第415题 字符串相加 与第67题 二进制求和第415题 字符串相加题目暴力版进阶版遇见的错误测试代码结果正确并可提交第67题 二进制求和题目思路与上题一样,直接优化版测试代码结果正确并可提交 第415题 字符串相加 题目 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9... 阅读详情

博主并没有什么算法基础,所以写的不好,勿喷,抛砖引玉,欢迎交流,感谢。 

//给你两个二进制字符串,返回它们的和(用二进制表示)。 
// 输入为 非空 字符串且只包含数字 1 和 0。
// 示例 1:
// 输入: a = "11", b = "1"
//输出: "100" 
// 示例 2:
// 输入: a = "1010", b = "1011"
//输出: "10101" 
// 提示:
// 每个字符串仅由字符 '0' 或 '1' 组成。
// 1 <= a.length, b.length <= 10^4 
// 字符串如果不是 "0" ,就都不含前导零。 
// Related Topics 数学 字符串
// 👍 468 👎 0
package com.zqh.leetcode.editor.cn;

//Java:二进制求和
public class P67AddBinary {
    public static void main(String[] args) {
        Solution solution = new P67AddBinary().new Solution();
//        System.out.println(solution.addBinary("11", "1"));
//        System.out.println(solution.addBinary("111", "1"));
        System.out.println(solution.addBinary("1001", "1"));
//        System.out.println(solution.addBinary("1", "101"));
//        System.out.println(solution.addBinary("1", "0"));
//        System.out.println(solution.addBinary("1010", "1011"));
//        System.out.println(solution.addBinary("1111", "1111"));
//        System.out.println(solution.addBinary("110010", "10111"));
//        System.out.println(1 ^ 1);
//        System.out.println(1 ^ 0);
//        System.out.println(0 ^ 0);
        // TO TEST
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public String addBinary(String a, String b) {
            char[] aChars = a.toCharArray();
            char[] bChars = b.toCharArray();
            return aChars.length >= bChars.length ? add(aChars, bChars) : add(bChars, aChars);
        }

        private String add(char[] aChars, char[] bChars) {
            Boolean isUp = false;
            StringBuilder stringBuilder = new StringBuilder();
            // 思想:倒序,从尾部开始进行相加,然后下一位
            for (int i = aChars.length - 1, j = 0; i >= 0; i--) {
                // 计算bChars的坐标索引,因为前面调用时进行了判断,所以aCharts的长度一定是会大于等于bChars的
                if (++j <= bChars.length) {
                    //判断是否有一个包含1
                    if ('1' == aChars[i] || '1' == bChars[bChars.length - j]) {
                        // 有一个包含1,并且2个都相等
                        if (aChars[i] == bChars[bChars.length - j]) {
                            // 如果i已经是0,也就是最后一位
                            if (i == 0) {
                                // 上一位的计算是up,说明这这一位需要+1,1+1+1=1,因为这里是长度相等的情况下才能进来,所以需要加一位
                                if (isUp) {
                                    stringBuilder.append("11");
                                    break;
                                }
                                // 上一位计算不是up,说明1+1+0=0,因为这里是长度相等的情况下才能进来,所以需要加一位
                                stringBuilder.append("01");
                                break;
                            }
                            if (isUp) {
                                //上一位的计算是up,所以1+1+1=1,并且继续进位
                                stringBuilder.append("1");
                                isUp = true;
                                continue;
                            }
                            //上一位的计算不是up。 因为不是最后一位,所以1+1=0
                            stringBuilder.append("0");
                            isUp = true;
                            continue;
                        }
                        //这2位数有一个是1,一个是0
                        if (isUp) {
                            //上一位的计算是up,所以1+0+1=0,并且继续进位
                            stringBuilder.append("0");
                            isUp = true;
                            continue;
                        }
                        //上一位的计算不是up。 因为不是最后一位,所以1+0=1,更改下一位up=false,不需要进位
                        stringBuilder.append("1");
                        isUp = false;
                        continue;
                    }
                    //  这2个数都是0
                    if (isUp) {
                        //上一位的计算是up,所以0+0+1=1,更改下一位up=false,不需要进位
                        stringBuilder.append("1");
                        isUp = false;
                        continue;
                    }
                    //2个数都不等于1,0+0=0
                    stringBuilder.append("0");
                    isUp = false;
                    continue;
                }
                // 来到这里,说明a的长度要比b的长度长,比如 111,1
                if (isUp) {
                    // 上一位需要下一位进位
                    if ('1' == aChars[i]) {
                        //上一位的计算是up,并且当前位也是1
                        if (i == 0) {
                            //最后一位,1+1=10
                            stringBuilder.append("01");
                            break;
                        }
                        //不是最后一位,但因为当前位是1,所以1+1=0,并且进位,继续判断下一位是0还是1
                        isUp = true;
                        stringBuilder.append("0");
                        continue;
                    }
                    // 当前是0,所以0+1=1,没有进位,更改下一位up=false,不需要进位
                    isUp = false;
                    stringBuilder.append("1");
                    continue;
                }
                // 上一位的计算不需要下一位进行进位,所以一直增加就好啦,比如1001+1=1010
                stringBuilder.append(aChars[i]);
            }
            //最后反转
            return stringBuilder.reverse().toString();
        }
    }
//leetcode submit region end(Prohibit modification and deletion)
}

 

Java算法——二进制求和(LeetCode第67题) 问题描述 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 示例 分析 这里可以直接模拟竖式相加的过程,从两个字符串最后开始遍历。每次相加都是 进位 + 上面的数字 + 下面的数字,因为二进制加法是逢二进一的。因此相加之后当前位的结果应该为:(进位 + 上面的数字 + 下面的数字)% 2。而每次相加产生的进位则可以用(进位 + 上面的数字 + 下面的数字)/ 2 来表示。 代码实现 /* 循环遍历两个字符串,循环一直到遍 阅读详情

相关推荐

LeetCode 第67题:二进制求和

通过这次的算法探险,我们学会了如何处理二进制字符串的加法问题。这个“二进制求和”的问题虽然看似简单,却涉及到了许多有趣的细节。通过详细的讲解和示例,我们深入理解了二进制加法中的进位处理逻辑。希望这篇文章能帮你更好地理解这道题目,如果有任何问题,欢迎留言讨论。

Gemini的博客 314

力扣简单题系列:二进制求和(LeetCode 67)

这道题通过模拟二进制加法的过程,帮助我们理解如何处理字符串表示的二进制数以及进位问题。对于初学者来说,掌握字符串遍历和进位处理是解决类似问题的关键。

weixin_53910667的博客 726

python系列&力扣系列【仅供参考】:二进制求和(力扣67题)

二进制求和(力扣67题)

weixin_54626591的博客 217

LeetCode第67题_二进制求和

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

qq_40263592的博客 1361

飞塔防火墙和paloalto防火墙构建ipsec

一、配置fortigate防火墙1.防火墙配置上网功能1.1配置fortigate的wan1接口IP为100.100.100.2/24VLAN交换internal,IP地址为192.168.156.99/24。开启DHCP分配IP地址范围为192.168.156.110-192.168.156.2101.2配置访问互联网的缺省路由1.3配置访问互联网的安全策略2.配置与Paloalto防火墙的IPSECVPN。

weixin_44675999的博客 3737

【Linux 驱动开发】STM32MP1 LCD 显示系统完整实践指南

STM32MP1 LCD显示系统实践指南 本文全面介绍STM32MP1平台实现MIPI DSI LCD显示的完整流程,涵盖硬件连接、设备树配置、显示原理和驱动实现。主要内容包括: 硬件连接:详细说明MIPI DSI差分对、背光PWM、复位/供电管脚的连接方式 设备树配置: PWM背光控制节点设置 LTDC与DSI端口映射关系 Panel节点参数定义 显示基础:讲解LCD/OLED显示原理、常见接口类型(RGB/LVDS/MIPI/HDMI)及信号时序 驱动实现。

猫猫的小茶馆 493

Leetcode刷题指南-67二进制求和

文章目录1)题目二进制求和要求:样例:2)思路3)代码 1)题目 二进制求和 要求: 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 样例: 示例 1: 输入: a = “11”, b = “1” 输出: “100” 示例 2: 输入: a = “1010”, b = “1011” 输出: “10101” 2)思路 二进制求和,满二进一 首先让两个字符串等长,若不等长,在短的字符串前补零,否则之后的操作会超出索引。 然后从后到前遍历所有的位数,同位相加,

qq_39751437的博客 432

Windows系统监控实战:Grafana+Prometheus+node_exporter保姆级配置指南(含常见问题解决)

本文提供了一份详尽的Windows系统监控实战指南,详细讲解了如何从零部署Grafana、Prometheus和node_exporter(实际为windows_exporter)监控栈。内容涵盖核心组件认知、分步配置解析、高级生产环境考量,并重点针对配置过程中常见的“No Data”问题提供了系统性的排查手册,旨在帮助用户快速搭建稳定可靠的系统资源监控平台。

weixin_29197835的博客 1007

力扣--67. 二进制求和(简单题)

力扣--67. 二进制求和(简单题)【题目描述】【示例】【解答】【思路】【代码】 这题思路蛮简单的。 【题目描述】 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 原题传送门 【示例】 示例 1: 输入: a = “11”, b = “1” 输出: “100” 示例 2: 输入: a = “1010”, b = “1011” 输出: “10101” 提示: 每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。 1≤a.length,b.length≤

Catherinyy的博客 230

025、空间降噪与时域降噪:噪声抑制与细节保留的平衡艺术

《降噪技术的平衡艺术:空间与时域降噪的协同优化》 本文深入探讨了图像处理中空间降噪与时域降噪的技术原理与工程实践。空间降噪通过像素级处理提升单帧质量,而时域降噪则利用帧间信息增强稳定性。文章揭示了两种方法在实际应用中的矛盾点:过度降噪会导致细节损失,影响后续算法性能。作者结合车载环视系统等实战案例,详细分享了参数调优经验,包括运动自适应策略、边缘保持技巧和嵌入式平台优化方案。特别强调降噪的最终目标应服务于下游算法需求,而非单纯追求图像美观。文章为工程人员提供了从理论到实践的完整指导,展现了降噪技术在效果与性

sundong_81的博客 186

MATLAB算法实战应用案例精讲-【数模应用】装箱问题

装箱问题可以根据不同的维度进行分类。以下是一些常见的装箱问题二维装箱问题:二维装箱问题假设所有物品都是平面上的矩形,并且需要将它们放入平面上的容器中。这个问题的目标是找到一种装箱方案,使得物品不重叠并占据的总面积最小。三维装箱问题:三维装箱问题考虑到物品可以具有高度,并且需要将它们放入三维容器(如箱子或货柜)中。目标是找到一种装箱方案,使得物品不重叠且总体积最小。多维装箱问题:多维装箱问题是指在更高维度空间中进行装箱的问题。除了长度和宽度之外,物品可能具有其他属性,如高度、重量、形状等。

qq_36130719的博客 1571

二进制求和(LeetCode第67题)

/ 进位只能是1,转换为字符'1'// 将右指针位置的字符赋值给左指针位置。// 指针指向字符串a的最后一个字符(最低位)// 指针指向字符串b的最后一个字符(最低位)// 计算当前位置三个数的和:a的当前位 + b的当前位 + 进位。// 在结果字符串末尾添加结束符'\0'

lhl364312的博客 456

YOLOv5算法改进(21)— 添加CA注意力机制 + 更换Neck网络之BiFPN + 更换损失函数之EIoU

本节课作者就结合论文对YOLOv5进行组合改进(添加CA注意力机制+更改Neck网络之BiFPN+更换损失函数之EIoU),小白必学!

小哥谈 2820

力扣(leetcode)第67题二进制求和(Python)

最后,我写了一篇MySQL教程,里面详细的介绍了MySQL的基本概念以及操作指令等内容,欢迎阅读!给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。输入:a = “1010”, b = “1011”a 和 b 仅由字符 ‘0’ 或 ‘1’ 组成。输入:a = “11”, b = “1”字符串如果不是 “0” ,就不含前导零。输出:“10101”

qq_58737789的博客 605

《AI编程实战:深度学习模型改进与系统部署》,改进专栏目录和介绍

专深度学习相关项目都写在本专栏,《一次订阅解锁全部,都有源码,永久观看》,包括车牌识别、股票预测、人脸识别、风格迁移、图像修复、图像超分辨重建、图像分割等任务,Web/PyQt系统实现。引入Transformer、Swin Transformer、DenseNet、ViT、ConvNeXt等算法实战,提供卷积改进,魔改对比实验,模型剪枝,模型蒸馏,模型量化,全网独家整合改进专栏,为不同领域的同学发表论文提供了大力支持。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3264

UE实现贴地线(SurfaceLine)效果

UnrealEngine实现贴地线效果

专注GIS开发 4572

LeetCode题库第67题二进制求和

题目描述:给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字1和0。 题解思路: 把二进制字符串转换成数组这样便于运算 把数组元素进行倒转,最后再把运算结果倒转一下;因为二进制运算是从右到左运算 对两个数组进行循环,把对应位置的数字相加,再定义一个空数组,若相加大于等于2时,则在数组中加入相加结果减去2的值,并在下一次循环时把结果加1;若小于2时则在数组中加入相加的结果 再把数组倒转返回结果就可以了 下面实战开始: 定义函数,参数为需传入的两个字符串...

qq_53818001的博客 1911

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LeetCode第67题:二进制求和(简单)

LeetCode第67题:二进制求和(简单) 题目:给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。 思路一:将两个字符串转成整型,相加,再把求得的和转换成二进制。但是有过长的字符串超出了限制。 class Solution { public String addBinary(String a, String b) { in...

new_whiter的博客 441

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode刷题笔记第67题:二进制求和

LeetCode刷题笔记第67题:二进制求和 想法: 要进行二进制求和先要将二进制数转换为十进制,得到的十进制求和结果再转换为二进制数。 class Solution: def addBinary(self, a: str, b: str) -> str: # 二进制求和 # 设置num存放求和结果 num = 0 # 将二进制数求和结果赋给num,其中int(a, 2)将二进制a变为十进制数,同理得到b的十进制数,求和之后得其和

qq_29787929的博客 172

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LeetCode刷题笔记(Java版)----67、二进制求和

67、二进制求和 描述:给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字1和0。 解法1:比较粗暴的方法,先找到较短的字符串,从右网左扫描。对应依次相加(**注意字符转整形 -‘0’!)后插入到StringBuilder的头中,分三种情况:《=1就直接存到StringBuilder ,不进位。等于2时,replace头为0,同时进位。等于3时,repla...

SOARING 445

0034力扣67题---二进制求和

力扣67题---二进制求和

java工作室 293

LeetCode刷题笔记 [67] 二进制求和 *未解决

/* * @lc app=leetcode.cn id=67 lang=c * * [67] 二进制求和 * * https://leetcode-cn.com/problems/add-binary/description/ * * algorithms * Easy (45.62%) * Total Accepted: 16K * Total Submissions:...

AaronDew的博客 292

力扣第 67 题 “二进制求和”

可以通过模拟二进制加法的规则,从两个字符串的尾部开始逐位相加,记录进位,并生成结果字符串。,以二进制字符串的形式返回它们的和。给你两个二进制字符串。

weixin_48941116的博客 1057

LeetCode 刷题【66. 加一、67. 二进制求和】

第一题是十进制加一操作,通过逢十进位机制处理数字数组,考虑最高位进位情况。第二题是二进制求和,提供两种解法:一种模拟十进制加法处理进位,另一种使用逻辑运算符判断进位情况

gzkhxohc的博客 374

力扣67. 二进制求和(逐位运算、位运算)

力扣67. 二进制求和 https://leetcode-cn.com/problems/add-binary/ 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字1和0。 示例1: 输入: a = "11", b = "1" 输出: "100" 示例2: 输入: a = "1010", b = "1011" 输出: "10101" 提示...

小麦China的博客 832

解题思路-LeetCode第67题:二进制求和

解题思路-LeetCode第67题:二进制求和 题目描述: 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 示例 1: 输入: a = “11”, b = “1” 输出: “100” 示例 2: 输入: a = “1010”, b = “1011” 输出: “10101” 解题方法: 从低位开始,对应位求和,然后求商得到进位位,剩下的余数为结果位,若最后产生进位则最高位补1,若没有产生进位直接返回即可。 代码如下: 提交后,通过。 ...

weixin_48153141的博客 308
上一篇: leetcode-第26题-删除排序数组中的重复项
下一篇: leetcode-第69题-x 的平方根
97牛肉面
博客等级 码龄9年 54粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值