Yoru Karu Studio

程式設計學習筆記 | 生活心得

LeetCode 解題思路:2. Add Two Numbers(兩數相加)

題目描述

給定兩個非空的鏈結串列,代表兩個非負整數。它們每位數字都是按照反向的方式儲存的,並且每個節點只能儲存一位數字。

請你將這兩個數字相加,並以相同的形式返回一個表示和的鏈結串列。

你可以假設除了數字 0 之外,這兩個數字都不會以 0 開頭。

範例:

輸入:l1 = [2,4,3], l2 = [5,6,4]
輸出:[7,0,8]
解釋:342 + 465 = 807

輸入:l1 = [0], l2 = [0]
輸出:[0]

輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
輸出:[8,9,9,9,0,0,0,1]
解釋:9999999 + 9999 = 10009998

LeetCode 解題思路:70 .Climbing Stairs(爬樓梯)

LeetCode 解題思路:Climbing Stairs(爬樓梯) 題目描述 你正在爬樓梯。需要 n 階才能到達樓頂。 每次你可以爬 1 或 2 個台階。有多少種不同的方法可以爬到樓頂? 範例 範例 1: 輸入:n = 2 輸出:2 解釋:有兩種方法可以爬到樓頂 1. 1 階 + 1 階 2. 2 階範例 2: 輸入:n = 3 輸出:3 解釋:有三種方法可以爬到樓頂 1. 1 階 + 1 階 + 1 階 2. 1 階 + 2 階 3. 2 階 + 1 階限制條件 1 <= n <= 45 核心概念 1. 問題本質分析 這是一個經典的動態規劃入門題。關鍵洞察: 到達第 n 階的方法數 = 到達第 (n-1) 階的方法數 + 到達第 (n-2) 階的方法數

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.
0%