67. Add Binary
来源:互联网 发布:同济大学软件学院地址 编辑:程序博客网 时间:2024/06/16 00:14
Problem:
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
题意是给两个二进制的string,然后写一个函数返回两个string对应的二进制值的和。我的想法是:首先两个字符串长度不一样,所以得先把短的高位补全0。我的计算和的代码也比较长,计算按string的倒序计算。首先是把每一位的char值转成int值,设置一个flag来表示进位与否,flag=1是进位。然后把每一位相加。如果和是1或者0的话,表示没有进位,而且结果值对应位就是该和的值。如果和是2或者3的话,表示要进位,而且结果值对应位的值是和减去2的值。算完最后一位假如flag=1,表示还得进位,新加一位1。最后把值倒转过来就是结果了。
一拿到题就直接写,可能代码有点长,算法不够精简。可能大家有更短更简单的方法,可能用位逻辑可以?如果大家有好的解法欢迎评论!
时间复杂度:O(n)
Code:(LeetCode运行3ms)
class Solution {public: string addBinary(string a, string b) { string result = ""; int len1 = a.length(); int len2 = b.length(); len1 > len2 ? (b.insert(b.begin(), len1 - len2, '0')) : (a.insert(a.begin(), len2 - len1, '0')); int flag = 0, eachNumber; char eachChar; for (int i = a.length() - 1; i >= 0; i--) { eachNumber = Addchar(a[i], b[i], flag); if (eachNumber <= 1) { eachChar = eachNumber + '0'; flag = 0; } else { eachNumber -= 2; eachChar = eachNumber + '0'; flag = 1; } result.push_back(eachChar); } if (flag == 1) { result.push_back('1'); } reverse(result.begin(), result.end()); return result; } int Addchar(char c1, char c2, int flag) { return (int) (c1 - '0') + (int) (c2 - '0') + flag; }};
阅读全文
0 0
- [LeetCode]67.Add Binary
- LeetCode --- 67. Add Binary
- [Leetcode] 67. Add Binary
- [leetcode] 67.Add Binary
- 67. Add Binary
- 【leetcode】67. Add Binary
- 67. Add Binary
- [leetcode] 67.Add Binary
- [leetcode] 67. Add Binary
- 67. Add Binary
- 67. Add Binary
- 【Leetcode】67. Add Binary
- 67. Add Binary
- 67. Add Binary LeetCode
- 67. Add Binary
- 【LeetCode】67. Add Binary
- 67. Add Binary
- 67. Add Binary
- 关于sql查询/删除重复记录的事
- java对象序列化,RMI
- LeetCode445. Add Two Numbers II
- ListView的整理
- eclipse + maven搭建SSM框架
- 67. Add Binary
- AndRoid Studio 发布APK
- 【安全牛学习笔记】基本工具-远程控制、NCAT、WIRESHARK、WIRESHARK-筛选器、常见协议
- node调接口拉数据
- C#详解值类型和引用类型区别
- Android中的弹出提示框
- C++笔记
- 深度学习caffe框架(1):如何快速上手caffe?
- LeetCode2. Add Two Numbers