题目:两数相加(C++)

两数相加我写出的代码如下

static const auto io_speed_up = []()
{
    std::ios::sync_with_stdio(false);
    cin.tie(nullptr);
    return 0;
}();

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        bool carry = false;
        ListNode* l3 = nullptr;
        ListNode* head = nullptr;
        ListNode* tail = nullptr;

        tail = head = new ListNode{l1->val + l2->val};
        if (head->val > 9)
        {
            head->val -= 10;
            carry = true;
        }
        l1 = l1->next;
        l2 = l2->next;

        while (l1 || l2 )
        {
            if (l1  && l2 )
            {
                l3 = new ListNode{l1->val + l2->val};
                l1 = l1->next;
                l2 = l2->next;
            }
            else if (l1 )
            {
                l3 = new ListNode{l1->val};
                l1 = l1->next;
            }
            else
            {
                l3 = new ListNode{l2->val};
                l2 = l2->next;
            }
            if (carry)
            {
                ++l3->val;
                carry = false;
            }
            if (l3->val > 9)
            {
                l3->val -= 10;
                carry = true;
            }

            tail->next = l3;
            tail = l3;
        }
        if (carry)
        {
            l3 = new ListNode{1};
            tail->next = l3;
            tail = l3;
        }
        return head;
    }
};

在提交后发现并不是最优解,跑去看了看最优解,得出原因:可能是我写的循环中包含分支太多,导致一次循环时间超过了最优解中的两次循环。

由此可见在写C++代码中要考虑到if语句对于现代CPU速度的影响。

猜你喜欢

转载自www.cnblogs.com/change4587/p/9142900.html
今日推荐