Solving Leetcode Interviews in Seconds with AI: Add Two Numbers
Introduction
In this blog post, we will explore how to solve the LeetCode problem "2" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.
Problem Statement
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself. Example 1: Input: l1 = [2,4,3], l2 = [5,6,4] Output: [7,0,8] Explanation: 342 + 465 = 807. Example 2: Input: l1 = [0], l2 = [0] Output: [0] Example 3: Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] Output: [8,9,9,9,0,0,0,1] Constraints: The number of nodes in each linked list is in the range [1, 100]. 0 <= Node.val <= 9 It is guaranteed that the list represents a number that does not have leading zeros.
Explanation
Here's the approach to solve the problem:
- Iterative Addition: Traverse both linked lists simultaneously, adding corresponding digits and handling carry-over.
- New Linked List Construction: Create a new linked list to store the sum, node by node.
Carry Handling: Propagate the carry to the next digit's addition.
Runtime Complexity: O(max(m, n)), where m and n are the lengths of the input linked lists. Storage Complexity: O(max(m, n)), for the space used by the new linked list.
Code
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def addTwoNumbers(l1: ListNode, l2: ListNode) -> ListNode:
"""
Adds two numbers represented as linked lists.
Args:
l1: The first linked list.
l2: The second linked list.
Returns:
The sum as a linked list.
"""
dummy_head = ListNode(0)
current = dummy_head
carry = 0
while l1 or l2 or carry:
val1 = l1.val if l1 else 0
val2 = l2.val if l2 else 0
sum_val = val1 + val2 + carry
carry = sum_val // 10
digit = sum_val % 10
current.next = ListNode(digit)
current = current.next
if l1:
l1 = l1.next
if l2:
l2 = l2.next
return dummy_head.next