【LeetCode刷题记录】简单篇-67-二进制求和

【题目描述】

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

【测试用例】

示例1:

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

        输出:"100"

示例2

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

        输出:"10101"

【思路分析】

最开始我想的是两个字符串从后往前遍历,对应位置相加,模拟正常的二进制加法计算,有进位的将进位1保存在jinWei变量中,无进位的正常相加。但是这样的做法在代码逻辑上有点复杂,因为相加的结果要存入结果字符串res的对应位置,这个索引不好控制(涉及到相加后会比原来的最长字符串的长度多一位的情况)。

所以为了便于理解,最开始就直接将两个字符串逆置,然后从前往后遍历,对应位相加,同时存储到res中的位置也相同,这样就可以用一个遍历i来表示所有的位置,最后再将res逆置回来。


【参考代码】

C实现

#include <stdio.h>
#include <string.h>
#include <stdlib.h>//easy-67-二进制求和
void reverse(char* s);
char* addBinary(char* a, char* b);int main(){char* a = "11";char* b = "1";char* res = addBinary(a, b);int i;for(i=0;i<strlen(res);++i){printf("%c",res[i]);	}return 0;
} void reverse(char* s){int i;int len = strlen(s);for(i=0;i<len/2;++i){char tmp = s[i];s[i] = s[len-i-1];s[len-i-1] = tmp;}
} char* addBinary(char* a, char* b) {reverse(a);reverse(b);int i;int jinWei=0;int len1 = strlen(a);int len2 = strlen(b);int len = len1>len2 ? len1 : len2;char* res = (char*)malloc(sizeof(char)*(len+2));for(i=0;i<len;++i){if(i<len1 && i<len2){int tmp = (a[i]-'0') + (b[i]-'0') + jinWei;res[i] = (tmp % 2) + '0';jinWei = tmp / 2;}else if(i<len1 && i>=len2){int tmp = (a[i]-'0') + jinWei;res[i] = (tmp % 2) + '0';jinWei = tmp / 2;}else if(i>=len1 && i<len2){int tmp = (b[i]-'0') + jinWei;res[i] = (tmp % 2) + '0';jinWei = tmp / 2;}}if(jinWei){res[len++]='1';}res[len] = '\0';reverse(res);return res;
}

C++实现

#include <iostream>
#include <string>
using namespace std;//easy-67-二进制求和
class Solution {
public:string reverse(string s);string addBinary(string a, string b);
};string Solution::reverse(string s){int i;int len = s.size();for(i=0;i<len/2;i++){char tmp = s[i];s[i] = s[len-i-1];s[len-i-1] = tmp;}return s;
}string Solution::addBinary(string a, string b){a = reverse(a);b = reverse(b);int i;int len1 = a.size();int len2 = b.size();int len = len1>len2 ? len1 : len2;int jinWei = 0;string res;for(i=0;i<len;i++){if(i<len1 && i<len2){int tmp = (a[i]-'0') + (b[i]-'0') + jinWei;res += (tmp % 2) + '0';jinWei = tmp / 2;}else if(i<len1 && i>=len2){int tmp = (a[i]-'0') + jinWei;res += (tmp % 2) + '0';jinWei = tmp / 2;}else if(i>=len1 && i<len2){int tmp = (b[i]-'0') + jinWei;res += (tmp % 2) + '0';jinWei = tmp / 2;}}if(jinWei){res += '1';}res = reverse(res);return res;
}int main(){string a = "0";string b = "0";Solution sol;string res = sol.addBinary(a, b);int i;for(i=0;i<res.size();++i){cout<<res[i];}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/3919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何解决冲突性需求,看看TRIZ怎么做

​本田公司的产品经理&#xff08;本田的产品经理被称为是大型产品领导人&#xff0c;large product leader&#xff09;在设计第三代雅阁的时候&#xff0c;面临的需求主要集中在三个方面&#xff1a;1、视野要好&#xff1b;2、空间要大&#xff1b;3、发动机要强劲。 每一个…

TCP关闭连接时的一些思考

TCP协议是TCP/IP栈中最复杂的协议&#xff0c;它最大的优点是传输的可靠性&#xff0c;这通过面向连接、按序传输、超时重传、流量控制等机制保证其传输的可靠性。但这并不是我们今天要讨论的重点&#xff01; TCP通信的过程分别是三个阶段&#xff1a;建立连接、传输数据、关…

图论基础知识 深度优先(Depth First Search, 简称DFS),广度优先(Breathe First Search, 简称DFS)

图论基础知识 学习记录自代码随想录 dfs 与 bfs 区别 dfs是沿着一个方向去搜&#xff0c;不到黄河不回头&#xff0c;直到搜不下去了&#xff0c;再换方向&#xff08;换方向的过程就涉及到了回溯&#xff09;。 bfs是先把本节点所连接的所有节点遍历一遍&#xff0c;走到下…

LightDB24.1 pro*c 支持EXEC ORACLE OPTION (CHAR_MAP=STRING)

背景介绍 为了方便ORACLE数据库迁移到LightDB数据库&#xff0c;兼容Pro*C的语法规则。从LightDB24.1版本开始ECPG支持EXEC ORACLE OPTION(CHAR_MAPSTRING)。设置该选项后&#xff0c;将保证字符数组以null结尾。 LightDB ECPG官网 使用约束&#xff1a; 仅支持一维字符数组&…

从单按键状态机思维扫描引申到4*4矩阵按键全键无冲扫描,一步一步教,超好理解,超好复现(STM32程序例子HAL库)

目前大部分代码存在的问题 ​ 单次只能对单个按键产生反应&#xff1b;多个按键按下就难以修改&#xff1b;并且代码耦合度较高&#xff0c;逻辑难以修改&#xff0c;对于添加长按&#xff0c;短按&#xff0c;双击的需求修改困难。 解决 16个按键按下无冲&#xff0c;并且代…

如何在CentOS本地搭建DataEase数据分析服务并实现远程查看数据分析

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务…

【项目分享】用 Python 写一个桌面倒计日程序!

事情是这样的&#xff0c;我们班主任想委托我做一个程序&#xff0c;能显示还有几天考试。我立即理解了这个意思&#xff0c;接下了这个项目。 话不多说&#xff0c;来看看这个项目吧—— 项目简介 仓库地址&#xff1a;https://gitee.com/yaoqx/desktop-countdown-day 这是 …

幻兽帕鲁中文怎么设置 游戏中文修改方法 《幻兽帕鲁》宠物指定配种显示英文解决方法 幻兽帕鲁Steam游戏解说合集 Mac玩Windows游戏

在广阔的世界中收集神奇的生物“帕鲁”&#xff0c;派他们进行战斗、建造、做农活&#xff0c;工业生产等&#xff0c;这是一款支持多人游戏模式的全新开放世界生存制作游戏。幻兽帕鲁支持多人在线捕捉“帕鲁”&#xff0c;展开丰富的冒险玩法&#xff1b;不同的关卡具有不同的…

Bellman Ford算法:解决负权边图的最短路径问题

Bellman Ford算法的介绍 在计算机科学的世界中&#xff0c;Bellman Ford算法是一种解决单源最短路径问题的算法&#xff0c;它可以处理有负权边的图。这个算法的名字来源于两位科学家Richard Bellman和Lester Randolph Ford&#xff0c;他们是这个算法的发明者。 这个算法的主…

AI图书推荐:2024年ChatGPT副业搞钱指南

本书《2024年ChatGPT副业搞钱指南》&#xff08;ChatGPT Side Hustles 2024&#xff09;由Alec Rowe撰写&#xff0c;旨在指导读者如何利用ChatGPT技术来提升被动收入、创造新的现金流&#xff0c;并在数字化时代保持领先。 本书是深入了解被动收入未来的综合指南。本书揭示了超…

【算法基础实验】图论-基于DFS的连通性检测

基于DFS的连通性检测 理论基础 在图论中&#xff0c;连通分量是无向图的一个重要概念&#xff0c;特别是在处理图的结构和解析图的组成时。连通分组件表示图中的一个子图&#xff0c;在这个子图中任意两个顶点都是连通的&#xff0c;即存在一条路径可以从一个顶点到达另一个顶…

Flutter应用下拉菜单设计DropdownButtonFormField控件介绍

文章目录 DropdownButtonFormField介绍使用方法重点代码说明属性解释 注意事项 DropdownButtonFormField介绍 Flutter 中的 DropdownButtonFormField 是一个用于在表单中选择下拉菜单的控件。它是 DropdownButton 和 TextFormField 的组合&#xff0c;允许用户从一组选项中选择…

sql中开窗函数的使用

窗口函数 普通的聚集函数只能用来计算一行内的结果&#xff0c;或者把所有行聚集成一行结果。而窗口函数可以跨行计算&#xff0c;并且把结果填到每一行中。 •通过查询筛选出的行的某些部分&#xff0c;窗口调用函数实现了类似于聚集函数的功能&#xff0c;所以聚集函数也可以…

井字棋游戏

1. 游戏创建 1.1导包 from tkinter import * import numpy as np import math import tkinter.messagebox 1.2 窗口内容 1.2.1创建一个窗口 root Tk() # 窗口名称 root.title("井字棋 from Sun") 1.2.2 创建一个框架&#xff0c;将其放置在窗口中 Frame1 F…

SpringBoot这29个注解你都用到过么

你好&#xff0c;我是柳岸花开。 在现代的Java开发中&#xff0c;Spring框架成为了无可争议的霸主。其强大的依赖注入和面向切面编程能力让开发者摆脱了繁琐的配置&#xff0c;专注于业务逻辑的实现。而Spring的核心功能正是通过一系列的注解来实现的。本文将带您了解Spring中不…

汽车底盘域的学习笔记

前言&#xff1a;底盘域分为传统车型底盘域和新能源车型底盘域&#xff08;新能源系统又可以分为纯电和混动车型&#xff0c;有时间可以再研究一下&#xff09; 1&#xff1a;传统车型底盘域 细分的话可以分为四个子系统 传动系统 行驶系统 转向系统 制动系统 1.1传动系…

css边距的接触

一、鼠标悬停 &#xff1a;鼠标选停到上时&#xff0c;设置样式 名&#xff1a;hover{ 样式&#xff1a;样式值 } 例如&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"view…

IOS 添加自动布局约束NSLayoutConstraint

自定义UICollectionViewCell&#xff0c;并添加自动布局约束。 #import "ViewChooseView.h"#pragma mark - Cellinterface ViewChooseViewCell : UICollectionViewCellproperty (nonatomic, strong) UILabel *showTemeLab; property (nonatomic, strong) UILabel *p…

什么样的内外网文档摆渡,可以实现安全高效传输?

内外网文档摆渡通常指的是在内网&#xff08;公司或组织的内部网络&#xff09;和外网&#xff08;如互联网&#xff09;之间安全地传输文件的过程。这个过程需要特别注意安全性&#xff0c;因为内网往往包含敏感数据&#xff0c;直接连接内网和外网可能会带来安全风险。因此会…

设计模式——终止模式之两阶段终止模式

文章目录 1. 错误思路2. 两阶段终止模式2.1 利用 isInterrupted2.2 利用停止标记interrupt-打断park Two Phase Termination 在一个线程 T1 中如何“优雅”终止线程 T2&#xff1f;这里的【优雅】指的是给 T2 一个料理后事的机会。 1. 错误思路 使用线程对象的 stop() 方法停…