Python 程式:查詢列表中每個元素除了自身索引之外所有元素的乘積
假設我們有一個名為 nums 的數字列表,我們需要找到一個新的列表,使得新生成的列表中索引為 i 的每個元素都是原始列表中除索引 i 處的元素之外所有數字的乘積。這裡我們需要在不使用除法運算子的情況下解決這個問題。
因此,如果輸入類似於 nums = [2, 3, 4, 5, 6],則輸出將為 [360, 240, 180, 144, 120]
為了解決這個問題,我們將遵循以下步驟:
- 如果 nums 的大小小於 1,則
- 返回 nums
- l := nums 的大小
- left := 一個大小為 l 的列表,最初所有值都為空
- right := 一個大小為 l 的列表,最初所有值都為空
- temp := 1
- 對於從 0 到 nums 大小的範圍內的 i,執行以下操作:
- 如果 i 等於 0,則
- left[i] := temp
- 否則,
- temp := temp * nums[i - 1]
- left[i] := temp
- 如果 i 等於 0,則
- temp := 1
- 對於從 nums 大小 - 1 到 0 的範圍內的 i,以 1 為步長遞減,執行以下操作:
- 如果 i 等於 nums 大小 - 1,則
- right[i] := temp
- 否則,
- temp := temp * nums[i + 1]
- right[i] := temp
- 如果 i 等於 nums 大小 - 1,則
- 對於從 0 到 nums 大小的範圍內的 i,執行以下操作:
- left[i] := left[i] * right[i]
- 返回 left
讓我們看看下面的實現來更好地理解:
示例
class Solution: def solve(self, nums): if len(nums) < 1: return nums l = len(nums) left = [None] * l right = [None] * l temp = 1 for i in range(len(nums)): if i == 0: left[i] = temp else: temp = temp * nums[i - 1] left[i] = temp temp = 1 for i in range(len(nums) - 1, -1, -1): if i == len(nums) - 1: right[i] = temp else: temp = temp * nums[i + 1] right[i] = temp for i in range(len(nums)): left[i] = left[i] * right[i] return left ob = Solution() nums = [2, 3, 4, 5, 6] print(ob.solve(nums))
輸入
[2, 3, 4, 5, 6]
輸出
[360, 240, 180, 144, 120]
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP