題目描述: 給定一個整數陣列 nums。反覆執行以下操作直到只剩一個元素:對相鄰元素求和並取模 10,生成新的陣列。最後剩下的元素即為三角和。
解題思路: 最直接的方式是模擬整個過程。每一輪將陣列長度減少 1。
由於 n 最大為 1000,總操作數約 n^2/2 ≈ 500000,完全可以接受。
時間複雜度:O(n^2) — 總共約 n*(n-1)/2 次加法和取模操作。
空間複雜度:O(1) — 原地修改陣列,不需要額外空間。
1. For len = n down to 2:
a. For i = 0 to len-2:
nums[i] = (nums[i] + nums[i+1]) % 10.
2. Return nums[0].組合數學法(Lucas 定理):最終結果等於 sum(C(n-1, i) * nums[i]) % 10。其中 C(n-1, i) 是二項式係數。利用 Lucas 定理在模 2 和模 5 下分別計算組合數,再用中國剩餘定理合併。可達 O(n) 時間,但實作較複雜。
遞迴法:遞迴地計算子陣列的三角和。每次遞迴生成新陣列,直到長度為 1。時間複雜度相同 O(n^2),但需要 O(n) 額外空間存中間陣列。