LeetCode 67. Add Binary

原创 2016年06月01日 20:32:14
问题描述:

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".

题目大意:用字符串实现二进制数的加法。

1.字符串长度不一定同,因此反转字符串在做加法,最后得到的结果在反转。

2.注意最高位的进位。

string addBinary(string a, string b)
{
    if(a == "0")
        return b;
    if(b == "0")
        return a;
    int l1 = a.length();
    int l2 = b.length();
    //字符反转,便于相加
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    //将字串转换为整型数组
    int *n1 = new int[l1];
    int *n2 = new int[l2];
    for(int i = 0;i < l1;i++)
        n1[i] = a[i] - '0';
    for(int i = 0;i < l2;i++)
        n2[i] = b[i] - '0';
    //两个二进制数相加的长度不会超过最长的那个字符串的长度+1
    int len = max(l1,l2);
    int *ans = new int[len + 1];
    memset(ans,0,sizeof(int)*(len+1));
    //以下的类似于合并两个有序链表的步骤,注意处理进位,逢2进1
    int i = 0;
    int j = 0;
    //进位
    int carry = 0;
    while(i < l1 && j < l2)
    {
        ans[i] = n1[i] + n2[i] + carry;
        carry = ans[i] / 2;
        ans[i] = ans[i] % 2;
        i++;
        j++;
    }
    while(i < l1)
    {
        ans[i] = n1[i] + carry;
        carry = ans[i] / 2;
        ans[i] = ans[i] % 2;
        i++;
    }
    while(j < l2)
    {
        ans[j] = n2[j] + carry;
        carry = ans[j] / 2;
        ans[j] = ans[j] % 2;
        j++;
    }
    //最高位可能还有进位
    if(carry == 1)
        ans[len] = 1;
    string res = "";
    for(int k = 0;k < len + 1;k++)
        res = res + char(ans[k] + '0');
        //前面为了便于相加做了反转处理,这里再次反转,
    reverse(res.begin(),res.end());
    //最高位没有进位,为0的情况,0不能显示出来。
    if(res[0] == '0')
        return res.substr(1);
    else
        return res;
    }



版权声明:本文为博主原创文章,未经博主允许不得转载。

几种排序的总结

#include #include #define N 12 void swap(int * a,int * b) { int temp; temp=*a; *a=*b; *b=temp; ...
  • u010327174
  • u010327174
  • 2013年12月19日 00:31
  • 429

C代码的coredump

C程序崩溃之后会自动转存储,利用这个信息可以快速定位出错的地方。
  • u013344915
  • u013344915
  • 2014年02月22日 20:00
  • 1868

攻防比赛点点滴滴(1)

1. Python image steganography 命令如下: stepic --decode --image-in=stegano1.bmp --out=tips
  • u011500307
  • u011500307
  • 2014年03月14日 09:50
  • 1651

贪心之多机调度问题

题目来自洛谷1190 问题描述: 学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的 供水量相等,均为 1。 现在有 n 名同学准备接水,他们的初始接水顺序已经...
  • S_Wiper
  • S_Wiper
  • 2017年06月12日 19:29
  • 165

支持向量机—SMO算法源码分析(1)

支持向量机的理论支持在此不细说,可以参考李航的《统计学习》,还有西瓜书。简化版SMO算法处理小规模数据集SMO算法是一种启发式算法。此简化版首先在数据集上遍历每一个alpha,然后在剩下的alpha集...
  • lilong117194
  • lilong117194
  • 2017年10月15日 10:09
  • 288

Reverse Pairs (第二周:分治法)

Reverse Pairs (第二周:分治法)
  • lin360580306
  • lin360580306
  • 2017年03月04日 15:14
  • 415

对整数数组进行二分查找;传数组指针会丢失数组大小信息。

二分查找是一个迭代(iterator)过程,它所搜索的对象是一个有序(这里用的升序)的数组。 思想: 1. 判断左右指针是否合理:若不合理则迭代结束;否则进行2。 2. 判断以左右指针批向的点为...
  • CY_TEC
  • CY_TEC
  • 2016年05月18日 11:40
  • 693

《LeetBook》leetcode题解(7): Reverse Integer[E]——处理溢出的技巧

007. Reverse Integer[E]——处理溢出的技巧 Reverse IntegerE处理溢出的技巧 题目 思路 思路1用long 思路2变化前后对比 思路3提前停止操作 题目Revers...
  • hk2291976
  • hk2291976
  • 2016年04月10日 10:59
  • 689

当printf("-")遇上fork() ---某公司招聘笔试题目

题目: [cpp] view plaincopy #include      #include      #include            int main(void) ...
  • stpeace
  • stpeace
  • 2014年08月27日 00:39
  • 2245

数据结构第一题线性表的各种操作SqList

完成截图功能: #include #include #include #define MaxSize 50 using namespace std; typedef char ElemTy...
  • a716121
  • a716121
  • 2016年03月22日 17:47
  • 925
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode 67. Add Binary
举报原因:
原因补充:

(最多只允许输入30个字)