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)

  1. 计算两个字符串长度,求出最短长度,确定长字符串,短字符串;
  2. 反向遍历短字符串,逐位与长字符串对应位相加,若长字符串求和后值大于 2,更新本位,且对前一位做+1处理。(注意达到首段特殊处理)
  3. 遍历完成后,若长字符串索引未到达头,再从该索引开始反向逐位判断值是否大于 2,若是,更新本位与前一位。
  4. 长字符串处理完成后,返回该长字符串。

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.二进制求和的更多相关文章

  1. Java实现 LeetCode 67 二进制求和

    67. 二进制求和 给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1 ...

  2. [LeetCode]67. 二进制求和(字符串)(数学)

    题目 给你两个二进制字符串,返回它们的和(用二进制表示). 输入为 非空 字符串且只包含数字 1 和 0. 题解 两个字符串从低位开始加,前面位不够补0.维护进位,最后加上最后一个进位,最后反转结果字 ...

  3. LeetCode:二进制求和【67】

    LeetCode:二进制求和[67] 题目描述 给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11" ...

  4. 力扣(LeetCode)67. 二进制求和

    给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" 输出: ...

  5. leetcode刷题-67二进制求和

    题目 给你两个二进制字符串,返回它们的和(用二进制表示). 输入为 非空 字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" ...

  6. LeetCode 简单 -二进制求和(105)

    给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" 输出: ...

  7. 力扣(LeetCode)二进制求和 个人题解

    给定两个二进制字符串,返回他们的和(用二进制表示). 输入为非空字符串且只包含数字 1 和 0. 示例 1: 输入: a = "11", b = "1" 输出: ...

  8. 【每天一题】LeetCode 0067. 二进制求和

    开源地址:https://github.com/jiauzhang/algorithms 题目描述 * https://leetcode-cn.com/problems/add-binary * 给定 ...

  9. 【Leetcode】二进制求和

    解题思路: 1. 首先在两个字符串前面补‘0’,使它们等长.否则要一直监督操作是否超出两个字符串的索引. 2. 从后向前遍历所有位数,同位相加.字符相加,利用ASCII码,字符在内部都用数字表示,我们 ...

  10. Leecode刷题之旅-C语言/python-67二进制求和

    /* * @lc app=leetcode.cn id=67 lang=c * * [67] 二进制求和 * * https://leetcode-cn.com/problems/add-binary ...

随机推荐

  1. IT老人,给后辈的十一点建议

    我已经在IT业打拼9年了,从完全自学成为技术团队leader到PM也确实总结了不少的经验,自己也经常跟学弟学妹聊天,分享职场经验,当老家有人报考计算机或者从事相关工作时也会咨询我的意见,我很明白IT人 ...

  2. Ocelot简易教程(五)之集成IdentityServer认证以及授权

    Ocelot简易教程目录 Ocelot简易教程(一)之Ocelot是什么 Ocelot简易教程(二)之快速开始1 Ocelot简易教程(二)之快速开始2 Ocelot简易教程(三)之主要特性及路由详解 ...

  3. mysql 开发基础系列12 选择合适的数据类型(上)

    一. char 与varchar比较 在上图的最后一行的值只适用在"非严格模式",关于严格模式后面讲到.在“开发基础系列4“ 中讲到CHAR 列删除了尾部的空格.由于char是固定 ...

  4. sql server 索引阐述系列二 索引存储结构

    一.概述. "流光容易把人抛,红了樱桃,绿了芭蕉“ 转眼又年中了,感叹生命的有限,知识的无限.在后续讨论索引之前,先来了解下索引和表数据的内部结构,这一节将介绍页的存储,页分配单元类型,区的 ...

  5. 译《The Part-Time Parliament》——终于读懂了Paxos协议!

    最近的考古发现表明,在Paxos小岛上,尽管兼职议会成员都有逍遥癖,但议会模式仍然起作用.他们依旧保持了一致的会议记录,尽管他们频繁的进出会议室并且他们的信使还很健忘.Paxon议会协议提供了一种新方 ...

  6. 高性能Mysql笔记 — explain

    explain 查看sql的执行计划,只是一个近似结果,一般不会实际执行该sql,如果有子查询就会执行子查询 explain table_name,这儿的table_name含义较广:子查询.unio ...

  7. 分享几个实用的Chrome扩展程序

    前言 吐槽一下自己,最近变懒了,博客已经变成月更了.这次分享几个自己工作这几年下来,平常用的比较多的几个谷歌浏览器的扩展程序. AdBlock 最受欢迎的 Chrome 扩展,拥有超过 6000 万用 ...

  8. bash内置命令mapfile:读取文件内容到数组

    bash提供了两个内置命令:readarray和mapfile,它们是同义词.它们的作用是从标准输入读取一行行的数据,然后每一行都赋值给一个数组的各元素.显然,在shell编程中更常用的是从文件.从管 ...

  9. 解读经典《C#高级编程》第七版 Page38-45.核心C#.Chapter2

    前言 控制流是语言中最基础的部分,我们不谈具体的细节,只讲讲一些关键和有趣的点. 01 流控制 条件语句:if, else if, else if语句的使用非常值得细讲,如何是好的使用习惯.有一点非常 ...

  10. 使用 Cglib 实现多重代理

    前言 由于 Cglib 本身的设计,无法实现在 Proxy 外面再包装一层 Proxy(JDK Proxy 可以),通常会报如下错误: Caused by: java.lang.ClassFormat ...