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
  • temp := 1
  • 對於從 nums 大小 - 1 到 0 的範圍內的 i,以 1 為步長遞減,執行以下操作:
    • 如果 i 等於 nums 大小 - 1,則
      • right[i] := temp
    • 否則,
      • temp := temp * nums[i + 1]
      • right[i] := temp
  • 對於從 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]

更新於: 2020-10-19

544 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.