加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Leetcode#66. Plus One &&Add Binary (大数)

发布时间:2020-12-14 05:01:42 所属栏目:大数据 来源:网络整理
导读:周末了,说好的每周三道题 题目66 Given a non-negative integer represented as a non-empty array of digits,plus one to the integer. You may assume the integer do not contain any leading zero,except the number 0 itself. The digits are stored s

周末了,说好的每周三道题

题目66

Given a non-negative integer represented as a non-empty array of digits,plus one to the integer.

You may assume the integer do not contain any leading zero,except the number 0 itself.

The digits are stored such that the most significant digit is at the head of the list.

题目67

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

For example,
a = “11”
b = “1”
Return “100”.

题意

大数加法的应用,一个十进制,一个二进制。
使用vector注意出现空指针

67-C++语言

class Solution {
public:
    string addBinary(string a,string b) 
    { 
        if(a=="0"&&b=="0")
            return "0";
        int lena,lenb,len;
        lena = a.size();
        lenb = b.size();
        len=max(lena,lenb)*2;
        int ai[len]={0},bi[len]={0},sum[len]={0},i,j,k=0,carry=0,now=0;

        for(i=a.size()-1;i>=0;i--)
            ai[k++]=a[i]-'0';
        k=0;
        for(i=b.size()-1;i>=0;i--)
            bi[k++]=b[i]-'0';

        for(i=0;i<len;i++)
        {
            now=ai[i]+bi[i]+carry;
            carry= now/2;
            sum[i]=now%2;
        }
        for(i=len-1;;i--)
        {
            if(sum[i]!=0)
                break;
        }
        string res="";
        for(j=i;j>=0;j--)
        {
            res+=(sum[j]+'0');
        }
        return res;  
    }
};

67-Python语言

class Solution(object):
    def addBinary(self,a,b):
        """ :type a: str :type b: str :rtype: str """
        if a=="0" and b=="0":
            return "0"
        n = len(a)
        m = len(b)
        max_len = max(n,m)*2
        ai=[0 for col in range(max_len)]
        bi=[0 for col in range(max_len)]
        sum=[0 for col in range(max_len)]
        k=0
        for i in range(n-1,-1,-1):
            ai[k] = int(a[i])
            k = k + 1

        k=0
        for i in range(m-1,-1):
            bi[k] = int(b[i])
            k = k + 1

        now= 0
        carry=0
        for i in range(0,max_len):
            now = ai[i] +bi[i] + carry
            carry = now / 2
            sum[i] = now % 2

        for i in range(max_len-1,-1):
            if sum[i]!=0:
                start = i
                break
        res = ""
        for i in range(start,-1):
            res+=str(sum[i])
        return res

66-C++语言

class Solution {
public:

    vector<int> plusOne(vector<int>& digits) {

        vector<int>res;
        int n = digits.size(),j;
        int temp[n+5]={0},now,carry=0;
        for(i=n-1;i>=0;i--)
        {
            temp[k++] = digits[i];
        }  
        temp[k]=0;
        for(i=0;i<n+1;i++)
        {
            if(i==0)
            {   
                now=temp[i]+1;
                carry=now/10;  
                temp[i]=now%10;  
            }
            else
            {
                now=temp[i]+carry;
                carry=now/10;
                temp[i]=now%10;
            }
            if(carry==0)
                break;
        }
        for(i=n+1;;i--)
            if(temp[i]!=0)
                break;
        for(j=i;j>=0;j--)
            res.push_back(temp[j]);
        return res;
    }
};

66-Python语言

class Solution(object):
    def plusOne(self,digits):
        """ :type digits: List[int] :rtype: List[int] """
        n = len(digits)
        temp = [0 for row in range(n+5)]
        res = [0 for row in range(n+5)]
        k = 0
        for i in range(n-1,-1):
            temp[k]=digits[i]
            k = k+1
        now = 0
        carry = 0
        for i in range(0,n+5):
            if i==0:
                now = temp[i]+1
                carry = now/10
                res[i] = now%10
            else:
                now = temp[i]+carry
                carry = now/10
                res[i] = now%10

        res1=[]
        for i in range(n,-1):
            if res[i]!=0:
                start=i
                break
        for i in range(start,-1):
            res1.append(res[i])
        return res1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读