题目:两数相加(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速度的影响。