สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums เราต้องหารายการใหม่ โดยที่แต่ละองค์ประกอบที่ดัชนี i ของรายการที่สร้างขึ้นใหม่เป็นผลคูณของตัวเลขทั้งหมดในรายการเดิม ยกเว้นรายการที่ดัชนี i ที่นี่เราต้องแก้โดยไม่ต้องใช้การหาร
ดังนั้น หากอินพุตเป็น nums =[2, 3, 4, 5, 6] ผลลัพธ์จะเป็น [360, 240, 180, 144, 120]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้าขนาดของ nums <1 แล้ว
- หมายเลขส่งคืน
- l :=ขนาดของ nums
- ซ้าย :=รายการขนาด l และเริ่มต้นค่าทั้งหมดเป็นโมฆะ
- ขวา :=รายการขนาด l และเริ่มต้นค่าทั้งหมดเป็นโมฆะ
- อุณหภูมิ :=1
- สำหรับ i ในช่วง 0 ถึงขนาดของ nums ให้ทำ
- ถ้าฉันเหมือนกับ 0 แล้ว
- left[i] :=อุณหภูมิ
- มิฉะนั้น
- อุณหภูมิ :=อุณหภูมิ * nums[i - 1]
- left[i] :=อุณหภูมิ
- ถ้าฉันเหมือนกับ 0 แล้ว
- อุณหภูมิ :=1
- สำหรับฉันในช่วงขนาด nums - 1 ถึง 0, ลดลง 1 ทำ
- ถ้าฉันมีขนาดเท่ากับ nums - 1 แล้ว
- right[i] :=อุณหภูมิ
- มิฉะนั้น
- อุณหภูมิ :=อุณหภูมิ * nums[i + 1]
- right[i] :=อุณหภูมิ
- ถ้าฉันมีขนาดเท่ากับ nums - 1 แล้ว
- สำหรับ i ในช่วง 0 ถึงขนาดของ nums ให้ทำ
- left[i] :=left[i] * right[i]
- กลับซ้าย
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
คลาสโซลูชัน:def แก้(ตัวเอง, nums):ถ้า 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 leftob =Solution()nums =[2, 3, 4, 5, 6]print(ob.solve(nums))ก่อน>อินพุต
[2, 3, 4, 5, 6]ผลลัพธ์
[360, 240, 180, 144, 120]