LeetCode 面試經常會涉及許多常見的算法和數據結構題目題目類型:
兩數之和 (Two Sum)
題目描述:給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那兩個整數,並返回它們的數組下標。
def twoSum(nums, target):
num_dict = {}
for i, num in enumerate(nums):
complement = target - num
if complement in num_dict:
return [num_dict[complement], i]
num_dict[num] = i
return None
整數反轉 (Reverse Integer)
題目描述:給你一個 32 位的有符號整數 x ,返回將 x 中的數字部分反轉後的結果。
def reverse(x):
result = 0
sign = 1 if x > 0 else -1
x = abs(x)
while x != 0:
pop = x % 10
x //= 10
if result > (2**31 - 1) // 10:
return 0
result = result * 10 + pop
return result * sign
回文數 (Palindrome Number)
題目描述:判斷一個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
def isPalindrome(x):
if x < 0:
return False
reversed_num = int(str(x)[::-1])
return x == reversed_num
有效的括號 (Valid Parentheses)
題目描述:給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。
def isValid(s):
stack = []
bracket_map = {')': '(', '}': '{', ']': '['}
for char in s:
if char in bracket_map:
top_element = stack.pop() if stack else '#'
if bracket_map[char] != top_element:
return False
else:
stack.append(char)
return not stack
合並兩個有序鏈表 (Merge Two Sorted Lists)
題目描述:將兩個升序鏈表合並為一個新的升序鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def mergeTwoLists(l1, l2):
if not l1:
return l2
if not l2:
return l1
if l1.val < l2.val:
l1.next = mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = mergeTwoLists(l1, l2.next)
return l2