📝 LeetCode 簡單題目學習筆記

💪 魚~ 加油呀!呀呀呀、一起來刷題吧!

1️⃣ Two Sum

簡單 Array Hash Table
題目:給定一個整數陣列 nums 和一個目標值 target,找出兩個數使它們相加等於 target,返回這兩個數的索引。

思路:

程式碼:

class Solution:
    def twoSum(self, nums, target):
        seen = {}
        for i, num in enumerate(nums):
            complement = target - num
            if complement in seen:
                return [seen[complement], i]
            seen[num] = i
        return []

延伸:


2️⃣ Valid Parentheses

簡單 Stack String
題目:判斷一個只包含 ()[]{} 的字串是否為有效的括號組合。

思路:

程式碼:

class Solution:
    def isValid(self, s):
        stack = []
        mapping = {')': '(', '}': '{', ']': '['}
        for char in s:
            if char in mapping:
                if stack and stack[-1] == mapping[char]:
                    stack.pop()
                else:
                    return False
            else:
                stack.append(char)
        return not stack

延伸:


3️⃣ Merge Two Sorted Lists

簡單 Linked List Recursion
題目:合併兩個已排序的鏈結串列,回傳合併後的結果。

思路:

程式碼:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class Solution:
    def mergeTwoLists(self, l1, l2):
        dummy = ListNode()
        current = dummy
        while l1 and l2:
            if l1.val < l2.val:
                current.next = l1
                l1 = l1.next
            else:
                current.next = l2
                l2 = l2.next
            current = current.next
        current.next = l1 if l1 else l2
        return dummy.next

延伸:


4️⃣ Best Time to Buy and Sell Stock

簡單 Array Dynamic Programming
題目:給定股價陣列,找出只買一次賣一次的最大利潤。

思路:

程式碼:

class Solution:
    def maxProfit(self, prices):
        min_price = float('inf')
        max_profit = 0
        for price in prices:
            min_price = min(min_price, price)
            max_profit = max(max_profit, price - min_price)
        return max_profit

延伸:


5️⃣ Palindrome Number

簡單 Math
題目:判斷一個整數是否是回文數(正著讀和反著讀一樣)。

思路:

程式碼:

class Solution:
    def isPalindrome(self, x):
        if x < 0:
            return False
        original = x
        reversed_num = 0
        while x:
            reversed_num = reversed_num * 10 + x % 10
            x //= 10
        return original == reversed_num

延伸:


6️⃣ Longest Common Prefix

簡單 String
題目:找出一組字串中最長的共同前綴。

思路:

程式碼:

class Solution:
    def longestCommonPrefix(self, strs):
        if not strs:
            return ""
        shortest = min(strs, key=len)
        for i, char in enumerate(shortest):
            for s in strs:
                if s[i] != char:
                    return shortest[:i]
        return shortest

延伸:


7️⃣ Valid Anagram

簡單 String Hash Table Sorting
題目:判斷兩個字串是否為字謎(字母排列相同)。

思路:

程式碼:

class Solution:
    def isAnagram(self, s, t):
        if len(s) != len(t):
            return False
        count = [0] * 26
        for char in s:
            count[ord(char) - ord('a')] += 1
        for char in t:
            count[ord(char) - ord('a')] -= 1
            if count[ord(char) - ord('a')] < 0:
                return False
        return True

延伸:


8️⃣ Search Insert Position

簡單 Array Binary Search
題目:在排序陣列中找到 target 的位置,或返回應該插入的位置。

思路:

程式碼:

class Solution:
    def searchInsert(self, nums, target):
        left, right = 0, len(nums)
        while left < right:
            mid = (left + right) // 2
            if nums[mid] < target:
                left = mid + 1
            else:
                right = mid
        return left

延伸:


9️⃣ Maximum Subarray

簡單 Array Dynamic Programming Kadane's Algorithm
題目:找出陣列中連續子陣列的最大和。

思路:

程式碼:

class Solution:
    def maxSubArray(self, nums):
        max_sum = current = nums[0]
        for i in range(1, len(nums)):
            current = max(nums[i], current + nums[i])
            max_sum = max(max_sum, current)
        return max_sum

延伸:


🔟 Contains Duplicate

簡單 Array Hash Table
題目:判斷陣列中是否有重複的元素。

思路:

程式碼:

class Solution:
    def containsDuplicate(self, nums):
        seen = set()
        for num in nums:
            if num in seen:
                return True
            seen.add(num)
        return False

延伸:


1️⃣1️⃣ Plus One

簡單 Array Math
題目:給定一個由數字組成的非空陣列,代表一個非負整數。將這個數字加一。最高位數字存在於陣列的頭部。

思路:

程式碼:

class Solution:
    def plusOne(self, digits):
        for i in range(len(digits) - 1, -1, -1):
            if digits[i] < 9:
                digits[i] += 1
                return digits
            digits[i] = 0
        return [1] + digits

延伸:


1️⃣2️⃣ Move Zeroes

簡單 Array Two Pointers
題目:將陣列中的所有 0 移到最后,同時保持非零元素的相對順序。

思路:

程式碼:

class Solution:
    def moveZeroes(self, nums):
        insert_pos = 0
        for num in nums:
            if num != 0:
                nums[insert_pos] = num
                insert_pos += 1
        while insert_pos < len(nums):
            nums[insert_pos] = 0
            insert_pos += 1

延伸:


📊 題目分類整理

類型題目
ArrayTwo Sum, Best Time, Max Subarray, Contains Duplicate
StringValid Parentheses, Longest Common Prefix, Valid Anagram
Linked ListMerge Two Sorted Lists
Hash TableTwo Sum, Valid Anagram, Contains Duplicate
Two PointersMerge Two Sorted Lists
Binary SearchSearch Insert Position
Dynamic ProgrammingBest Time, Max Subarray

✅ 解題技巧總結

💪 魚~ 慢慢來呀!一題一題刷,不急的呀!呀呀呀、你可以的!

✅ 完成學習

完成本教材後,點擊下方按鈕記錄你的學習進度!