LeetCode 2. Add Two Numbers

題目連結:Add Two Numbers - LeetCode

想法

我的作法可能沒有那麼好,我是用 vector 存數字,接著進行運算,最後再轉成 link-list。

code

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        vector<int> n1,n2;
        n1.emplace_back(l1->val);
        while(l1->next!=nullptr){
            l1=l1->next;
            n1.emplace_back(l1->val);
        }

        n2.emplace_back(l2->val);
        while(l2->next!=nullptr){
            l2=l2->next;
            n2.emplace_back(l2->val);
        }

        vector<int> ans(max(n1.size(),n2.size())+1);
        for(int i=0;i<n1.size();++i){
            ans[i]+=n1[i];
        }

        for(int i=0;i<n2.size();++i){
            ans[i]+=n2[i];
        }

        for(int i=0;i<max(n1.size(),n2.size());++i){
            if(ans[i]>=10){
                ans[i+1]++;
                ans[i]-=10;
            }
        }

        if(ans.back()==0){
            ans.pop_back();
        }

        ListNode *ret=new ListNode(ans[0]),*a=ret,*b=nullptr;
        for(int i=1;i<ans.size();++i){
            b=new ListNode(ans[i]);
            a->next=b;
            a=b;
        }

        return ret;
    }
};

發佈留言