Leetcode StringSum & LinkList Sum
class Solution {
public:
string addBinary(string a, string b) {
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
string a1,a2;
if(a.length()>=b.length())
{
a1=a;
a2=b;
}
else
{
a1=b;
a2=a;
}
string c=a1;//此处必须是a1
int flag=0;
for(int i=0;i<a2.length();i++)
{
c[i]=a1[i]+a2[i]-'0'-'0'+flag;
if(c[i]>=2)
{
flag=1;
c[i]=c[i]+'0'-2;
}
else {c[i]=c[i]+'0';flag=0;}
}
for(int j=a2.length();j<a1.length();j++)
{
c[j]=a1[j]-'0'+flag;
if(c[j]>=2)
{
flag=1;
c[j]=c[j]+'0'-2;
}
else {c[j]=c[j]+'0';flag=0;}
}
if(flag==1)c+='1';
reverse(c.begin(),c.end());
return c;
}
};
LinkList Sum
不能调用构造函数创造新结点,会发生隐式转换。所以只能采用原来的结点。不使用翻转链表,会造成超时。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
assert(l1!=NULL&&l2!=NULL);
ListNode *p,*q;
int n1=0,n2=0;
for(p=l1;p;p=p->next)
n1++;
for(q=l2;q;q=q->next)
n2++;
if(n1<n2)
{
ListNode *temp=l1;
l1=l2;
l2=temp;
}
q=l1;
for(p=l2;p;p=p->next)
{
q->val=p->val+q->val;
q=q->next;
}
l2->next=NULL;//只能置为null
l2->val=0;//初始值0
for(q=l1;q;q=q->next)
{
if(q->val>=10)
{
if(q->next==NULL)
{
q->next=l2;
}
q->val-=10;
q->next->val+=1;
}
}
return l1;
}
};
浙公网安备 33010602011771号