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

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

题目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,-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,-1):
            if sum[i]!=0:
                start = i
                break
        res = ""
        for i in range(start,-1,-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(),i,j;
        int temp[n+5]={0},k=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,-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,-1):
            if res[i]!=0:
                start=i
                break
        for i in range(start,-1,-1):
            res1.append(res[i])
        return res1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值