周末了,说好的每周三道题
题目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