Cho danh sách nums, tạo danh sách mới mà phần tử tại chỉ số i là tích của tất cả số trong danh sách gốc trừ số tại i. Không dùng phép chia.
Ví dụ: [2, 3, 4, 5, 6] → [360, 240, 180, 144, 120].
Quy trình giải quyết (Prefix/Suffix Product)
- Tạo mảng
leftlưu tích các phần tử bên trái. - Tạo mảng
rightlưu tích các phần tử bên phải. - Kết quả tại
ilàleft[i] * right[i].
Ví dụ mã nguồn
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)) # Output: [360, 240, 180, 144, 120]
Đầu vào
[2, 3, 4, 5, 6]
Đầu ra
[360, 240, 180, 144, 120]