假设我们有一个称为nums的数字列表,我们必须找到一个新列表,以使新生成的列表的索引i处的每个元素都是原始列表中除索引i处的所有数字之外的所有数字的乘积。在这里,我们必须解决它而不使用除法。
因此,如果输入类似于nums = [2、3、4、5、6],那么输出将为[360、240、180、144、120]
为了解决这个问题,我们将遵循以下步骤-
如果nums <1的大小
返回数字
l:= nums的大小
左:=大小为l的列表,最初所有值均为null
right:=大小为l的列表,最初所有值均为null
温度:= 1
对于范围从0到nums的i,执行
temp:= temp * nums [i-1]
左[i]:=温度
左[i]:=温度
如果我等于0,那么
除此以外,
温度:= 1
对于范围为nums的i-1到0,减小1,执行
temp:= temp * nums [i +1]
正确的[i]:=临时
正确的[i]:=临时
如果我与nums的大小相同-1,则
除此以外,
对于范围从0到nums的i,执行
左[i]:=左[i] *右[i]
返回左
让我们看下面的实现以更好地理解-
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]