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
周末了,说好的每周三道题 题目66Given 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. 题目67Given two binary strings,return their sum (also a binary string). For example, 题意大数加法的应用,一个十进制,一个二进制。 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
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |