关闭

LeetCode 67. Add Binary

标签: leetcode
98人阅读 评论(0) 收藏 举报
分类:
问题描述:

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;
    }



0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:30628次
    • 积分:1363
    • 等级:
    • 排名:千里之外
    • 原创:108篇
    • 转载:16篇
    • 译文:0篇
    • 评论:14条
    最新评论