LeetCode 67 Add Binary(二进制相加)(*)
翻译
给定两个二进制字符串,返回它们的和(也是二进制字符串)。
比如,
a = "11"
b = "1"
返回 "100".
原文
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
分析
我一開始写了这个算法,尽管实现了功能,只是不符合题目的用意。
int ctoi(char c) {
return (int)c - 48;
}
int pow2(int n) {
int sum = 1;
while ((n--) > 0)
sum *= 2;
return sum;
}
int btoi(string s) {
int sum = 0, len = s.size();
for (int i = 0; i < len; ++i) {
sum += ctoi(s[i]) * pow2(len - i - 1);
}
return sum;
}
string itob(int n) {
if (n == 0) return "0";
string s = "";
while (n >= 1) {
if (n % 2 == 1)
s += "1";
else s += "0";
n /= 2;
}
string newStr = "";
for (int i = s.size() - 1; i >= 0; i--)
newStr += s[i];
return newStr;
}
string addBinary(string a, string b) {
return itob(btoi(a) + btoi(b));
}
然后改了改,写出这么脑残的代码我自己都醉了……
string addBinary(string a, string b) {
if (a.size() < b.size()) swap(a, b);
int len1 = a.size(), len2 = b.size();
int comLen = len1 < len2 ? len1 : len2;
int pos = 0;
string str = "";
for (int index1 = len1 - 1, index2 = len2 - 1; index1 > len1 - comLen, index2 >= 0; index1--, index2--) {
if (pos == 0) {
if (a[index1] == '1' && b[index2] == '1') {
str += "0";
pos = 1;
}
else if (a[index1] == '0' && b[index2] == '0') {
str += "0";
}
else {
str += "1";
}
}
else if (pos == 1) {
if (a[index1] == '1' &&b[index2] == '1') {
str += "1";
pos = 1;
}
else if (a[index1] == '0' && b[index2] == '0') {
str += "1";
pos = 0;
}
else {
str += "0";
pos = 1;
}
}
}
for (int index = len1 - comLen-1; index >= 0; index--) {
if (pos == 0) {
if (a[index] == '1') {
str += "1";
}
else {
str += "0";
}
}
else if (pos == 1) {
if (a[index] == '1') {
str += "0";
pos = 1;
}
else {
str += "1";
pos = 0;
}
}
}
if (pos == 1) str += "1";
string newStr = "";
for (int i = str.size() - 1; i >= 0; i--)
newStr += str[i];
return newStr;
}
转了一圈也没发现很简洁的代码,那就先这样了……
LeetCode 67 Add Binary(二进制相加)(*)的更多相关文章
- [LeetCode] 67. Add Binary 二进制数相加
Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...
- leetCode 67.Add Binary (二进制加法) 解题思路和方法
Given two binary strings, return their sum (also a binary string). For example, a = "11" b ...
- [leetcode]67. Add Binary 二进制加法
Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...
- LeetCode 67. Add Binary (二进制相加)
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- (String) leetcode 67. Add Binary
Given two binary strings, return their sum (also a binary string). The input strings are both non-em ...
- leetcode 67. Add Binary (高精度加法)
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- Leetcode 67 Add Binary 大数加法+字符串处理
题意:两个二进制数相加,大数加法的变形 大数加法流程: 1.倒置两个大数,这一步能使所有大数对齐 2.逐位相加,同时进位 3.倒置两个大数的和作为输出 class Solution { public: ...
- LeetCode 67. Add Binary
Given two binary strings, return their sum (also a binary string). For example,a = "11"b = ...
- Java [Leetcode 67]Add Binary
题目描述: Given two binary strings, return their sum (also a binary string). For example,a = "11&qu ...
随机推荐
- Python打包成exe,pyc
D:\mypython\path\ C:\Python27\Scripts\pyinstaller.exe -w mypython.py # Python打包成exe D:\mypython\path ...
- java内存模型(线程独占部分)
线程独占部分 1.你了解Java的内存模型吗? 内存简介 有内核空间.用户空间(java是运行在用户空间上) 32位系统--->最大的访问内存大小是4G 62位系统--->最大的访问内存大 ...
- Android UI: LinearLayout中layout_weight 属性的使用规则
首先来查看android sdk文档,有这么一段话 LinearLayout also supports assigning a weight to individual children with ...
- ios operationqueue
http://www.hrchen.com/2013/06/multi-threading-programming-of-ios-part-2/
- 前端拖动div 效果
/** * author levi * url http://levi.cg.am */ $(function() { $(document).mousemove(function(e) { if(! ...
- vue在传值的时候经常遇到的问题
在我用vue编写程序的时候,在传值的时候,经常会遇到些问题,像今天遇到了两个问题,在用父传子的方法去传值,当父组件中的要传的数据是for循环出来的或者是列表的时候,你想每次运行的事件,都去传某一行,或 ...
- Git Bash 常用指令
1. 关于git bash常用指令 推荐博客: 史上最简单的 GitHub 教程 猴子都能懂的GIT入门 Learn Version Control with Git for Free Git Do ...
- 查询SYS_ORG_TB树的层级
WITH N(SYS_ORG_ID,SYS_ORG_NAME,LEVEL) AS( AS LEVEL FROM SYS_ORG_TB WHERE SYS_ORG_UPID IS NULL UNION ...
- ubuntu卸载编译安装的软件
cd 源代码目录 make clean ./configure make make uninstall
- day23 01 类的命名空间
day23 01 类的命名空间 一.初识面向对象复习 定义类: class 函数:方法 动态属性 变量:类属性 静态属性 过程: (1)_init_方法:初始化:def _init_(self,参数 ...