Yoru Karu Studio

程式設計學習筆記 | LeetCode 解題分享

LeetCode 解題思路:69. Sqrt(x)(平方根)

LeetCode 解題思路:Sqrt(x)(平方根) 題目描述 給定一個非負整數 x,返回 x 的平方根,結果向下取整到最接近的整數。返回的整數必須是非負的。 限制:你不能使用任何內建的指數函數或運算子。 例如,在 C++ 中不能使用 pow(x, 0.5) 在 Python 中不能使用 x ** 0.5 範例 範例 1: 輸入:x = 4 輸出:2 解釋:4 的平方根是 2,所以返回 2範例 2: 輸入:x = 8 輸出:2 解釋:8 的平方根是 2.82842...,向下取整後返回 2限制條件 0 <= x <= 2³¹ - 1 核心概念 1. 問題本質分析 這道題本質上是要找到一個最大的整數 ans,使得 ans² <= x。 換句話說,我們要找到滿足以下條件的最大整數: ans * ans <= x (ans + 1) * (ans + 1) > x 2. 為什麼適合用二分搜尋? 關鍵洞察:平方根函數是單調遞增的!

LeetCode 解題思路:67. Add Binary(二進位加法)

LeetCode 解題思路:Add Binary(二進位加法) 題目描述 給定兩個二進位字串 a 和 b,返回它們的和作為一個二進位字串。 這道題目考驗我們對進位制運算的理解,以及如何優雅地處理字串操作。 範例 範例 1: 輸入:a = "11", b = "1" 輸出:"100" 解釋:11 + 1 = 100(二進位)範例 2: 輸入:a = "1010", b = "1011" 輸出:"10101" 解釋:1010 + 1011 = 10101(二進位)限制條件 1 <= a.length, b.length <= 10⁴ a 和 b 僅由字符 '0' 或 '1' 組成 字串如果不是 "0",就不含前導零 核心概念 1. 理解二進位加法規則 在深入解題之前,讓我們先回顧二進位加法的基本規則: 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10(結果為 0,進位 1) 1 + 1 + 1 = 11(結果為 1,進位 1)視覺化理解 範例:11 + 1 = 100 1 1 ← a + 1 ← b ------- 1 0 0 ← 結果 步驟分解: 位置: 2 1 0 ───── 第0位: 1+1 = 10 → 結果=0, 進位=1 第1位: 1+0+1(進位) = 10 → 結果=0, 進位=1 第2位: 0+0+1(進位) = 1 → 結果=1, 進位=02.

LeetCode 解題思路:66. Plus One(加一)

題目描述 給定一個由整數陣列表示的大整數 digits,其中每個 digits[i] 是該整數的第 i 位數字。數字按照從左到右的順序排列,從最高位到最低位。該大整數不包含任何前導零。 將該大整數加一,並返回結果的數字陣列。 範例 範例 1: 輸入:digits = [1,2,3] 輸出:[1,2,4] 解釋:該陣列表示整數 123。 123 + 1 = 124範例 2: 輸入:digits = [4,3,2,1] 輸出:[4,3,2,2] 解釋:該陣列表示整數 4321。 4321 + 1 = 4322範例 3: 輸入:digits = [9] 輸出:[1,0] 解釋:該陣列表示整數 9。 9 + 1 = 10範例 4: 輸入:digits = [9,9,9] 輸出:[1,0,0,0] 解釋:999 + 1 = 1000限制條件 1 <= digits.length <= 100 0 <= digits[i] <= 9 digits 不包含任何前導零 核心概念理解 1. 問題本質 這題模擬的是我們手算加法的過程:

LeetCode 解題思路:58. Length of Last Word(最後一個單詞的長度)

題目描述 給定一個由單詞和空格組成的字串 s,返回字串中最後一個單詞的長度。 單詞是指由非空格字符組成的最大子字串。 範例 範例 1: 輸入:s = "Hello World" 輸出:5 解釋:最後一個單詞是 "World",長度為 5。範例 2: 輸入:s = " fly me to the moon " 輸出:4 解釋:最後一個單詞是 "moon",長度為 4。範例 3: 輸入:s = "luffy is still joyboy" 輸出:6 解釋:最後一個單詞是 "joyboy",長度為 6。限制條件 1 <= s.length <= 10^4 s 只包含英文字母和空格 ' ' s 中至少存在一個單詞 核心概念理解 1. 問題本質 這題看似簡單,但需要處理幾個關鍵點: 字串末尾可能有空格 單詞之間可能有多個空格 需要找到最後一個非空單詞 2. 什麼是「單詞」? 定義:連續的非空格字符序列 例如:" hello world " - 單詞 1:"hello" - 單詞 2:"world" - 注意前後的空格不算在單詞內3.

LeetCode 解題思路:35. Search Insert Position(搜索插入位置)

題目描述 給定一個排序數組和一個目標值,在數組中找到目標值,並返回其索引。如果目標值不存在於數組中,返回它將會被按順序插入的位置。 請必須使用時間複雜度為 O(log n) 的演算法。 範例 範例 1: 輸入:nums = [1,3,5,6], target = 5 輸出:2 解釋:5 在數組中,索引為 2範例 2: 輸入:nums = [1,3,5,6], target = 2 輸出:1 解釋:2 不在數組中,應該插入到索引 1 的位置範例 3: 輸入:nums = [1,3,5,6], target = 7 輸出:4 解釋:7 不在數組中,應該插入到數組末尾範例 4: 輸入:nums = [1,3,5,6], target = 0 輸出:0 解釋:0 不在數組中,應該插入到數組開頭限制條件 1 <= nums.length <= 10^4 -10^4 <= nums[i] <= 10^4 nums 為無重複元素的升序排列數組 -10^4 <= target <= 10^4 核心概念理解 1. 問題本質 這題本質上是二分查找的變體:

LeetCode 解題思路:28 .Find the Index of the First Occurrence in a String(找出字符串中第一個匹配項的下標)

題目描述 給定兩個字符串 haystack 和 needle,請你在 haystack 字符串中找出 needle 字符串的第一個匹配項的下標(下標從 0 開始)。如果 needle 不是 haystack 的一部分,請返回 -1。 範例 範例 1: 輸入:haystack = "sadbutsad", needle = "sad" 輸出:0 解釋:"sad" 在下標 0 和 6 處出現。 第一個匹配項在下標 0 處,所以返回 0。範例 2: 輸入:haystack = "leetcode", needle = "leeto" 輸出:-1 解釋:"leeto" 沒有在 "leetcode" 中出現,所以返回 -1。限制條件 1 <= haystack.length, needle.length <= 10^4 haystack 和 needle 僅由小寫英文字符組成 核心概念理解 1. 問題本質 這是經典的字符串匹配問題(String Matching Problem): 在主字符串(haystack)中尋找子字符串(needle) 返回第一次出現的位置 如果找不到返回 -1 2. 實際應用場景 這個問題在實際開發中非常常見:
0%