算法--二进制求和

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

描述

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例

示例 1:

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

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

提示:
每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 “0” ,就都不含前导零。

分析

最简单的做法:先将 aa 和 bb 转化成十进制数,求和后再转化为二进制数。

public String addBinary(String a, String b) {
        Integer a1 = Integer.parseInt(a,2);
        Integer b1 = Integer.parseInt(b,2);

        return Integer.toBinaryString(a1+b1);
    }

但是提交后出现问题:
在这里插入图片描述
原来在 Java 中:

如果字符串超过 3333 位,不能转化为 Integer
如果字符串超过 6565 位,不能转化为 Long
如果字符串超过 500000001500000001 位,不能转化为 BigInteger

暴力反转
思路:
(1) 从低位开始依次同时遍历两个字符串每一位求和并记录进位。
(2) 使用 StringBuilder 依次拼接每一位的运算结果。
(3) 遍历完成后将结果字符串翻转返回。
参考:
作者:iceblood
链接:https://leetcode-cn.com/problems/add-binary/solution/67ti-er-jin-zhi-qiu-he-by-iceblood/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

class Solution {
    public String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        char[] charsA = a.toCharArray();
        char[] charsB = b.toCharArray();
        // 定义 tag 记录二进制运算的进位。
        int tag = 0;
        // 从后往前遍历两个字符串并计算依次拼接每一位。
        for (int i = charsA.length - 1, j = charsB.length - 1; i >= 0 || j >= 0; i--, j--) {
            int curr = tag;
            // 只有两个字符串没有遍历完,就累加当前位置的数值。
            curr += i >= 0 ? charsA[i] - '0' : 0;
            curr += j >= 0 ? charsB[j] - '0' : 0;
            // 当前位置的和除以 2 ,余数就留在当前位置,商就表示进位。
            sb.append(curr % 2);
            tag = curr / 2;
        }
        // 两个字符串都遍历完以后判断最后是否还有进位。
        sb.append(tag == 1 ? tag : "");
        // 将最终结果翻转后返回。
        return sb.reverse().toString();
    }
}

任意进制求和~二进制为例.txt 该资料为任意进制求和(以二进制为例)算法C++完整代码实现(详解教程、有注释),对于C/C++初学者以及IT求职者来说是很好的学习资料。主要包括任意进制求和的题目要求、具体解题思路、两道二进制求和的典型例题(有详细注释),该资料为本人亲自整理,且代码完整、注释全面! 立即下载

相关推荐

feko金属球远场RCS双站

feko金属球远场RCS双站

a264672的博客 6910

【LeetCode】求和

使用「竖式」计算十进制的加法的方式:1.两个「加数」的右端对齐; 2.从最右侧开始,依次计算对应的两位数字的和。如果和大于等于 10,则把和的个位数字计入结果,并向前面进位。 3.依次向左计算对应位置两位数字的和,如果有进位需要加上进位。如果和大于等于 10,仍然把和的个位数字计入结果,并向前面进位。 4.当两个「加数」的每个位置都计算完成,如果最后仍有进位,需要把进位数字保留到计算结果中。在代码中需要注意的有: 1.本题给出的二进制数字是字符串形式,不可以转化成 int 型,因为可能溢出; 2.两个「加数

Hello World! 933

智能体在车联网中的应用:一份详尽到每日的100天学习路线图

这100天的旅程,是一次对毅力、学习方法和工程实践能力的综合考验。它不仅关乎掌握一系列技术点,更关乎培养解决复杂系统性问题的思维模式——将宏观的交通需求分解为微观的智能体决策,再通过多智能体协同涌现出宏观的智能行为。当你完成这份大纲时,你将拥有的不仅是一个项目作品集,更是一套应对“智能体+车联网”乃至更广泛AI+垂直领域挑战的方法论。未来已来,期待你成为构建智能交通新生态的关键贡献者。

IT深耕十余载,大道之简 1332

二进制求和

给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 示例 1: 输入: a = “11”, b = “1” 输出: “100” 示例 2: 输入: a = “1010”, b = “1011” 输出: “10101” 提示: 每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。 1 <= a.length, b.length <= 10^4 字符串如果不是 “0” ,就都不含前导零。 简单粗暴将其转化为字符数组里对应元素的求和处理 注意到’0‘对应AS

qq_51792035的博客 1822

中科蓝讯蓝牙开发:从源码到固件的自动化构建链路解析

本文详细解析了中科蓝讯AB530X蓝牙芯片从源码到最终固件的完整自动化构建链路。通过剖析prebuild.bat、GCC编译、postbuild.bat等关键环节,阐述了资源打包、配置生成、代码编译与固件合成的全过程,并重点介绍了如何实现一键编译与自动下载,为开发者高效进行嵌入式蓝牙开发提供清晰指南。

weixin_29193259的博客 121

cellranger安装以及使用

接受cellranger count的输出数据,将同一组的不同测序样本的表达矩阵整合在一起,比如tumor组原来有4个样本,PBMC组有两个样本,现在可以使用aggr生成最后的tumor和PBMC两个矩阵,并且进行标准化去掉测序深度的影响。但是由于病毒基因组太小了,且注释结果只有CDS没有exon,所以曲线救国,将CDS整体替换为exon,也不进行过滤了,直接下一步。虽然安装完毕,但是现在要运行cellranger的话需要在终端输入cellranger的整个路径。自动执行这个命令,需要将“

m0_59974475的博客 9393

【LeetCode-简单】67. 二进制求和(详解)

java:逢二进一

丨康有为丨的博客 1226

一款值得关注的开源企业管理ERP系统

盒木ERP是一款开源的现代化企业管理系统,采用前后端分离架构,后端基于Python+Django,前端使用Vue+Ant Design。系统涵盖采购、销售、库存、财务等核心业务模块,支持移动端操作和PDA扫码。具有开源免费、技术先进、功能完善等特点,适合中小企业使用或二次开发。项目提供详细部署指南,支持Docker容器化部署,是学习ERP系统开发和企业数字化转型的优秀选择。

1105

C语言基础算法 二进制求和leecode

题目: 二进制求和 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 示例 1: 输入: a = “11”, b = “1” 输出: “100” 示例 2: 输入: a = “1010”, b = “1011” 输出: “10101” 提示: 每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。 1 <= a.length, b.length <= 10^4 字符串如果不是 “0” ,就都不含前导零。 可能很多人想在转换成10进制这样去计算,但是这样

大师匈的博客 2678

自然语言处理6 -- 情感分析

1 概述 情感分析是自然语言处理中常见的场景,比如淘宝商品评价,饿了么外卖评价等,对于指导产品更新迭代具有关键性作用。通过情感分析,可以挖掘产品在各个维度的优劣,从而明确如何改进产品。比如对外卖评价,可以分析菜品口味、送达时间、送餐态度、菜品丰富度等多个维度的用户情感指数,从而从各个维度上改进外卖服务。 情感分析可以采用基于情感词典的传统方法,也可以采用基于深度学习的方法,下面详细讲解 ...

谢杨易的博客 5万+

天爱验证码wasm验证码逆向

本文分析了某网站采用WASM加密技术的情况,发现其加密方式主要针对data和轨迹信息,整体加密逻辑变化不大。通过反混淆技术可以还原代码,并确认加密过程分为两步:先对原始参数逐个加密,再调用WASM模块进行最终加密。研究发现关键参数drives和ki都存储在WASM模块内,通过提取wasm_exec.js文件即可直接使用该加密功能。本文仅提供技术研究思路,强调严禁用于任何违法行为。

码王吴彦祖的博客 933

每天一道算法题之二进制求和

二进制求和 题目描述: 给你两个二进制字符串,返回它们的和(用二进制表示)。 输入为 非空 字符串且只包含数字 1 和 0。 思路: ​ 从最低位开始一步一步进行求解,注意处理进位. 代码部分: public String addBinary(String a, String b) { int aIdx = a.length()-1; int bIdx = b.length()-1; int array = 0;//进位 StringBuilder sb =

m0_46855873的博客 273

innovus:streamOut gds中pg text带有冒号(:)解决办法

streamOut后查看layout,发现部分PG text后面加了冒号,比如VDD: / VSS:。当然,这个问题还有另一种解决办法,就是通过脚本给terminal打text再streamOut。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1190

算法题 二进制求和

本文介绍了三种实现二进制字符串相加的方法。核心思路是模拟竖式加法,从字符串末尾开始逐位相加并处理进位。方法一使用常规计算(推荐),方法二采用位运算优化,方法三通过补零统一长度。所有方法的时间复杂度均为O(max(m,n)),空间复杂度亦为O(max(m,n))。关键点包括字符转数字处理、进位计算、边界条件处理以及结果字符串反转。文章还提供了详细的测试用例和常见问题解答,帮助理解算法实现细节。

红血哥 465

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

领扣LintCode算法问题答案-408. 二进制求和

领扣LintCode算法问题答案-408. 二进制求和 目录408. 二进制求和鸣谢 408. 二进制求和 给定两个二进制字符串,返回他们的和(用二进制表示)。 样例 1: 输入: a = “0”, b = “0” 输出: “0” 样例 2: 输入: a = “11”, b = “1” 输出: “100” public class Solution { /** * @param a: a number * @param b: a number * @retu.

二当家的白帽子 1021

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Java算法入门】二进制求和,位运算基础大揭秘!✨

本文介绍了二进制求和问题的三种解决方案:模拟法、位运算法和使用BigInteger类。重点讲解了模拟法的实现步骤,包括字符串处理、进位规则和从低位到高位的计算过程。还提供了位运算法和BigInteger处理大数的代码示例,并比较了各种方法的优缺点。对于算法初学者,本文强调理解二进制运算规则和进位处理是关键,建议优先掌握模拟法以应对不同长度的二进制字符串相加。该问题不仅考察了基本的编程能力,也帮助理解计算机底层运算机制。

红目香薰 1007

算法——二进制求和

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

weixin_30668887的博客 158

算法探秘:二进制插入与二叉树路径求和的极致艺术

将M的二进制序列嵌入N的第i~j位,如同在集成电路板上替换指定区域的晶体管,需保证信号通道的严丝合缝。(以 N=1024(10000000000), M=19(10011), i=2, j=6 为例)“在二叉树的混沌星云中,寻找所有节点和等于目标的引力路径,如同追踪暗物质在时空中的轨迹。容量保障:区域长度 ≥ M的位宽(如 M=10011 需5位)原理:清零区域(全0)与移植体(含0/1)的布尔叠加。当比特流的冷光遇见树形结构的暖熵,算法宇宙的。将M的LSB(最低有效位)对齐N的第i位。

司徒鸿的博客 2170

算法系列——二进制求和(Add Binary)

题目描述Given two binary strings, return their sum (also a binary string).For example, a = “11” b = “1” Return “100”.解题思路模拟二进制加法。 这个题目和模拟两个数相加操作比较类似。对于当前位和进位的获得,可以通过异或操作获得当前位;可以通过统计1的个数来获得进位,具体参见程序实现。注意

BridgeGeorge 925

算法-二进制求和

题目要求: 给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。 示例 1: 输入: a = “11”, b = “1” 输出: “100” 示例 2: 输入: a = “1010”, b = “1011” 输出: “10101” 代码: class Solution { public String addBinary(String a, String ...

li_xunhuan的博客 1711

算法学习(Java实现之字符串篇)····二进制求和

给定两个二进制字符串,返回他们的和(用二进制表示)。 样例 a = 11 b = 1 返回 100 public class Solution { /** * @param a a number * @param b a number * @return the result */ public String addBina

DUANJIEFEI的专栏 3828

【C++算法】63.字符串_二进制求和

解法:模拟列竖式运算。

hlyd520的博客 407

leetcode算法67.二进制求和

leetcode算法67. 二进制求和

真正的大师永远怀着一颗学徒的心 1705

字符串计算算法题(对进位更加得心应手)--力扣67二进制求和,43字符串相乘

文章包含两道题目的解法: 1. 第一道题目是“67.二进制求和”,要求给定两个二进制字符串,返回它们的和。解法使用了模拟十进制的大数相加的过程,通过遍历两个字符串同时进行相加并处理进位的操作,最终得到结果。 2. 第二道题目是“43.字符串相乘”,要求给定两个以字符串形式表示的非负整数,返回它们的乘积。解法采用了无进位相乘然后相加的思路,首先进行数字相乘得到中间结果,然后处理进位并最终得到乘积的字符串形式。 文章提供了题目链接、描述以及具体的代码解法,并且通过示例说明了解题思路。

2301_78702440的博客 1048
上一篇: 算法--加一
下一篇: 算法-- x 的平方根
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值