leetcode-67.二进制求和
leetcode-67.二进制求和
Points
- 数组
- 数学
题意
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字
1和0。示例 1:
输入: a = "11", b = "1"
输出: "100"示例 2:
输入: a = "1010", b = "1011"
输出: "10101"示例 3:(自己加的)
输入: a = "10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101",
b = "110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011"
输出: "110111101100010011000101110110100000011101000101011001000011011000001100011110011010010011000000000"(这个用例过了,大概就行了。^_^)
算法
用时:4ms
复杂度:O(n)
- 计算两个字符串长度,求出最短长度,确定长字符串,短字符串;
- 反向遍历短字符串,逐位与长字符串对应位相加,若长字符串求和后值大于 2,更新本位,且对前一位做+1处理。(注意达到首段特殊处理)
- 遍历完成后,若长字符串索引未到达头,再从该索引开始反向逐位判断值是否大于 2,若是,更新本位与前一位。
- 长字符串处理完成后,返回该长字符串。
code
class Solution {
public:
string addBinary(string a, string b) {
int shortLen, dvalue;
string ans, addStr;
int thisBit, nextBit, t;
if(a.length() >= b.length())
{
shortLen = b.length();
ans = a;
addStr = b;
dvalue = a.length() - b.length();
}
else
{
shortLen = a.length();
ans = b;
addStr = a;
dvalue = b.length() - a.length();
}
for(int i=shortLen-; i>=; i--)
{
t = i + dvalue;
ans[t] += (addStr[i]-'');
thisBit = (ans[t]-'')%;
nextBit = (ans[t]-'')/;
if((ans[t] - '') >= )
{
ans[t] = (thisBit + '');
if(t == )
{
ans.insert(, , (nextBit+''));
break;
}
else
{
ans[t-] += nextBit;
}
}
}
t--;
if(t >= )
{
while((ans[t] - '') >= && (t >= ))
{
thisBit = (ans[t]-'')%;
nextBit = (ans[t]-'')/;
ans[t] = (thisBit + '');
if(t == )
{
ans.insert(, , (nextBit+''));
break;
}
else
{
ans[t-] += nextBit;
t--;
}
}
}
return ans;
}
};
leetcode-67.二进制求和的更多相关文章
- Java实现 LeetCode 67 二进制求和
67. 二进制求和 给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1 ...
- [LeetCode]67. 二进制求和(字符串)(数学)
题目 给你两个二进制字符串,返回它们的和(用二进制表示). 输入为 非空 字符串且只包含数字 1 和 0. 题解 两个字符串从低位开始加,前面位不够补0.维护进位,最后加上最后一个进位,最后反转结果字 ...
- LeetCode:二进制求和【67】
LeetCode:二进制求和[67] 题目描述 给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11" ...
- 力扣(LeetCode)67. 二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" 输出: ...
- leetcode刷题-67二进制求和
题目 给你两个二进制字符串,返回它们的和(用二进制表示). 输入为 非空 字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" ...
- LeetCode 简单 -二进制求和(105)
给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" 输出: ...
- 力扣(LeetCode)二进制求和 个人题解
给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" 输出: ...
- 【每天一题】LeetCode 0067. 二进制求和
开源地址:https://github.com/jiauzhang/algorithms 题目描述 * https://leetcode-cn.com/problems/add-binary * 给定 ...
- 【Leetcode】二进制求和
解题思路: 1. 首先在两个字符串前面补‘0’,使它们等长.否则要一直监督操作是否超出两个字符串的索引. 2. 从后向前遍历所有位数,同位相加.字符相加,利用ASCII码,字符在内部都用数字表示,我们 ...
- Leecode刷题之旅-C语言/python-67二进制求和
/* * @lc app=leetcode.cn id=67 lang=c * * [67] 二进制求和 * * https://leetcode-cn.com/problems/add-binary ...
随机推荐
- python(leetcode)-重复元素算法题
leetcode初级算法 问题描述 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 该问题表述非常简单 ...
- Java使用OkHttps工具类调用外部接口
前言 现在公司业务已止不是传统的增删改查等简单的业务处理操作,而是对数据各种联调三方接口与其他系统进行交互等,那么就需要我们在后台java中进行外部接口的调用,本文采用OkHttps工具类对接微信接口 ...
- vue项目 使用Hbuilder打包app 设置沉浸式状态栏
使用 Hbuilder新建好移动app项目后,mainfest.json这个文件里的 plus里设置 statusbar ..... "plus": { "statusb ...
- PowerDesigner使用方法
我们需要创建一个测试数据库,一步一步来学习使用PowerDesigner,为了简单,我们在这个数据库中只创建一个Student表和一个Major表.其表结构和关系如下所示. 看看怎样用PowerDes ...
- linux 命令 — archive
tar 一般用法 tar -cf out.tar [files] tar -cf out.tar file1 file2 -c :创建文件 -f:指定创建的文件名称,-f必须是所有参数的最后一项,比如 ...
- 记一次安装Ipython的流程
这是一个悲伤的安装ipython的过程. 写下来留个教训吧. 也是希望对博友一些帮助吧. 注: 我也写了一篇window下安装bpython的文章(个人感觉bpython要比ipython强大的多), ...
- 【API知识】RestTemplate的使用
前言 在某种情况下,后台服务可能需要访问另一台服务器的REST接口.以前估计不少人用的都是HttpRequest类来着,结合Paser解析JSON格式的Body.现在Spring Boot的Web S ...
- 使用Laya引擎开发微信小游戏(下)
本文由云+社区发表 6. 动画 6.1 创建伞兵对象 在src目录下创建一个新目录role,用来存放游戏中角色. 在role里创建一个伞兵Soldier.ts对象文件. module role{ ex ...
- python下载安装requests库
一.python下载安装requests库 1.到git下载源码zip源码https://github.com/requests/requests 2.解压到python目录下: 3.“win+R”进 ...
- JS_单个或多个文件上传_不支持单独修改
A-From表单直接填写提交地址,不过干预: 1. 单文件上传 最简单的文件上传,是单文件上传,form标签中加入enctype="multipart/form-data",for ...