• 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;
        }
    };
            
    
  • 相关阅读:
    正则表达式---用户验证
    最短路 Dijkstra
    最短路 Dijkstra+堆优化
    LCIS(最长公共上升子序列)
    最小生成树 Kruskal
    网络流 最大流
    网络流 最小费用最大流
    树链剖分
    树状数组
    双重Hash
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/3025000.html
Copyright © 2020-2023  润新知