題目描述:給定一個以整數陣列表示的非負整數(最高位在陣列最前面),對這個整數加一並回傳結果陣列。陣列中每個元素代表一個位數,且不含前導零(除非數字本身為 0)。
解題思路:模擬小學加法的進位過程,從最低位(陣列末尾)往高位處理:
這個思路保證只走一次陣列,且只有在所有位數皆為 9 時才需要 O(n) 額外空間(插入新元素)。
時間複雜度:O(n) — 最壞情況(全為 9)需遍歷所有位數,並在最前面插入一個元素。
空間複雜度:O(1) — 原地修改,只有在全為 9 時才需 O(n) 的輸出空間(但輸出本身不計入額外空間)。
1. n = length of digits 2. For i from n-1 down to 0: a. If digits[i] < 9: increment digits[i] and return digits b. Else: set digits[i] = 0 (carry propagates left) 3. If loop completes (all digits were 9): a. Insert 1 at the front of digits 4. Return digits
字串轉換法 O(n):將陣列轉為整數字串,用大數加法,再轉回陣列。概念直觀但需要字串操作,且對超大數字可能溢位或需要特殊函式庫。
遞迴進位法 O(n):用遞迴從最低位往上傳遞進位,寫法優雅但有函式呼叫堆疊開銷,實際上與迭代版本等價,不具明顯優勢。