สมมติว่าเรามีอาร์เรย์ที่เรียกว่า nums ของ n จำนวนเต็ม โดยที่ n> 1 เราต้องค้นหาเอาต์พุตของอาร์เรย์ที่เอาต์พุต[i] เท่ากับผลคูณขององค์ประกอบทั้งหมดของ nums ยกเว้น nums[i] ดังนั้นหากอาร์เรย์อินพุตคือ [1,2,3,4] เอาต์พุตจะเป็น [24,12,8,6] เราต้องแก้ปัญหานี้โดยไม่ต้องใช้ตัวดำเนินการหาร
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- right_mul :=อาร์เรย์ที่มีขนาดเท่ากับ nums ให้เติม 0
- องค์ประกอบสุดท้ายของ right_mul =องค์ประกอบสุดท้ายของ nums
- สำหรับฉันอยู่ในช่วง 1 ถึงความยาวของ nums
- right_mul[length of nums – i – 1] =right_mul[length of nums – i]* nums[length of nums – i – 1]
- output :=อาร์เรย์ที่มีขนาดเท่ากับ nums ให้เติมด้วย 0
- คำนำหน้า :=1 และดัชนี :=0
- ในขณะที่ดัชนี <ความยาวของเอาต์พุต – 1
- ผลลัพธ์[ดัชนี] :=คำนำหน้า * right_mul[ดัชนี + 1]
- คำนำหน้า :=คำนำหน้า * nums[ดัชนี]
- ดัชนี :=ดัชนี + 1
- องค์ประกอบสุดท้ายของผลลัพธ์ :=คำนำหน้า
- ผลตอบแทนที่ได้
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution(object): def productExceptSelf(self, nums): right_multiply = [0] * len(nums) right_multiply[-1]=nums[-1] for i in range(1,len(nums)): right_multiply[len(nums)-i-1] = right_multiply[len(nums)-i] * nums[len(nums)-i-1] output = [0]*len(nums) prefix = 1 current_index = 0 while current_index < len(output)-1: output[current_index] = prefix * right_multiply[current_index+1] prefix *= nums[current_index] current_index +=1 output[-1] = prefix return output ob1 = Solution() print(ob1.productExceptSelf([1,3,5,7,9]))
อินพุต
[1,3,5,7,9]
ผลลัพธ์
[945, 315, 189, 135, 105]