笔试题80. LeetCode OJ (67)
2016-06-18 14:56
253 查看
Add Binary
这个题的意思比较明了,计算两个字符串表示的二进制数的加法,可以参照示例看看,意思还是比清楚的。
我的思路是从右往左计算,将他们的和放到一个新的string中,其中最主要的是要处理进位,进位的处理需要一直处理,我分别举出相应的例子说明一下吧:
(1). "10"+"11"
这两个字符串一样长,所以最后加完以后,最后的还有一个进位需要处理。
(2). "1" + "111"
这两个字符串长度不等,所以处理完一个字符串后还是需要单独处理另一个字符串中考虑进位
最后需要做的是逆置字符串,这样就得到了最终的结果
将进位的情况分析清楚的时候也就是你解答出此题的时候了,下面看看我的代码吧。
class Solution { public: string addBinary(string a, string b) { string ret = ""; int len1 = a.size(); int len2 = b.size(); //空串 if (len1 == 0 && len2 == 0) return ret; //一空,一非空 if (len1 == 0) return b; if (len2 == 0) return a; //记录进位信息,用于下一位的处理 int carrybit = 0; while (len1 > 0 && len2 > 0) { int bit = a[len1 - 1] - '0' + b[len2 - 1] - '0'; if (carrybit == 1) bit += 1; //处理进位 if (bit > 1) { carrybit = 1; bit %= 2; ret.push_back(bit + '0'); } else { carrybit = 0; ret.push_back(bit + '0'); } --len1; --len2; } //两个字符串很可能长度不等 while (len1--) { int bit = a[len1] - '0'; if (carrybit == 1) bit += 1; if (bit > 1) { carrybit = 1; bit %= 2; } else { carrybit = 0; } ret.push_back(bit + '0'); } while (len2--) { int bit = b[len2] - '0'; if (carrybit == 1) bit += 1; if (bit > 1) { carrybit = 1; bit %= 2; } else { carrybit = 0; } ret.push_back(bit + '0'); } //按照上面的思路,最后的进位没有处理,需要单独处理 if (len1 <= 0 && len2 <= 0) { if (carrybit == 1) ret.push_back('1'); } //逆序ret,得到正确的结果 int begin = 0; int end = ret.size()-1; while (begin < end) swap(ret[begin++], ret[end--]); return ret; } };
相关文章推荐
- leetcode 125 Valid Palindrome
- BZOJ3876: [Ahoi2014]支线剧情
- Java学习:static 静态变量
- [leetcode] 361. Bomb Enemy 解题报告
- 把字符串转换成整数
- STL之vector
- Android 利用内容提供者添加联系人的操作
- STL之vector
- 如何编写驱动程序
- sublime 3 注册码+PYTHON 环境配置+pylint插件path问题+package control找不到packages解决方法。
- Android之粗仿微信6.0——微信6.0的欢迎界面
- 头文件互相包含与error C2146: 语法错误 : 缺少“;”的问题
- android-- 一个FlowLayout带你学会自定义ViewGroup
- html中文乱码
- leetcode题解日练--2016.6.17
- jQuery操作元素的属性与样式
- MYSQL 免安装版配置
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- 《30天》的汇编实现(二)
- linux系统编程之文件与I/O(一):文件的打开关闭