【LeetCode】67.二进制求和(C++)
时间:2019-03-19
本文章向大家介绍【LeetCode】67.二进制求和(C++),主要包括【LeetCode】67.二进制求和(C++)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目地址:https://leetcode-cn.com/problems/add-binary/
题目描述:
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
代码一:代码不简洁,但耗时短
class Solution {
public:
string addBinary(string a, string b) {
if(a.size()<b.size()){//保证a不比b短
string c(a);
a = b;
b = c;
}
vector<int> res;//vector结果
int carrying= 0;//进位
for(int i = 0;i < b.size();i++){//遍历短string
int s1 = int(b[b.size() - i - 1] - '0');
int s2 = int(a[a.size() - i - 1] - '0');
int temp = (s1 + s2 + carrying) % 2 ? 1:0;
res.push_back(temp);
carrying= (s1 + s2 + carrying) >= 2 ? 1:0;
}
for(int i = b.size();i<a.size();i++){//接着遍历长string
int s = int(a[a.size() - i - 1] - '0');
int temp = (s + carrying) % 2 ? 1:0;
res.push_back(temp);
carrying= (s + carrying) >= 2 ? 1:0;
}
if(carrying)res.push_back(1);//遍历完发现有进位
string ress;//string结果
for(int i=0;i<res.size();i++)ress += char(res[res.size() - 1 - i] + '0');
return ress;
}
};
代码二:使用迭代器,代码简洁,耗时稍长
class Solution {
public:
string addBinary(string a, string b) {
string s;
auto pa = a.end() - 1;//最后一位
auto pb = b.end() - 1;
int carrying = 0;//进位
while ( pa >= a.begin() || pb >= b.begin())
{
int bitA = 0,bitB = 0;
if(pa >= a.begin()) bitA = *pa-- - '0';//判断是否已经第一位,如果不是向前更新迭代器
if(pb >= b.begin()) bitB = *pb-- - '0';
int sum = bitA + bitB + carrying;
string bit = sum % 2?"1":"0";//如果模为1,则该位为1
s = bit + s;
carrying = sum / 2;//如果sum大于2则进位
}
if(carrying)//遍历完毕发现有进位
s = "1" + s;
return s;
}
};
- [ASP.NET MVC]通过对HtmlHelper扩展简化“列表控件”的绑定
- [ASP.NET MVC]为HtmlHelper添加一个RadioButtonList扩展方法
- 在ASP.NET MVC中使用“RadioButtonList”和“CheckBoxList”
- [WCF REST] 一个简单的REST服务实例
- [WCF REST] 提高性能的一个有效的手段:条件资源获取(Conditional Retrieval)
- [WCF REST] 解决资源并发修改的一个有效的手段:条件更新(Conditional Update)
- [WCF REST] 通过ASP.NET Output Caching实现声明式缓存
- [WCF REST] 通过ASP.NET Output Caching实现声明式缓存
- CentOS6.5下安装JDK
- 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
- 开源API测试工具 Hitchhiker v0.8 - 自动化测试结果统计
- 腾讯AI-JavaAPI示例代码
- C++ 模板学习
- 小程序游戏上线!独家微信官方及专业核心解读!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- leetcode栈之用队列实现栈
- 3分钟短文:无私分享!Laravel模型使用2个小技巧
- 抖音小程序基础之 如何绑定点击事件(教程含源码)
- 抖音小程序基础之 如何使用内联样式 style和class(教程含源码)
- 抖音小程序基础之 如何使用选择器class id element (教程含源码)
- 3分钟短文:Laravel模型作用域,为你“节省”更多代码
- Pytorch 0.4.0版本保存的模型在高版本调用问题的解决方式
- Qt音视频开发27-Onvif设备搜索
- 容器化 FRP 使用方案
- 学习从拥有一支好笔开始
- leetcode栈之最小栈
- Discourse 安装防火墙的配置如何让邮件能够发送
- CentOS 8 如何安装 htop
- Discourse 重复安装过程中的密钥签发问题
- Appium之「元素定位和UiAutomator表达式」