สมมติว่าเรามีสองรายการ nums1 และ nums2 ตอนนี้ ข้อจำกัดคือเมื่อเรารวมลำดับขององค์ประกอบในแต่ละรายการจะไม่เปลี่ยนแปลง ตัวอย่างเช่น หากองค์ประกอบเป็น [1,2,3] และ [4,5,6] รายการที่ผสานที่ถูกต้องบางรายการคือ [1, 4,2,3,5,6] และ [1,2,3,4,5,6] อาจมีลำดับการผสานที่ถูกต้องอื่นๆ ดังนั้นหากเรามีขนาดของรายการ N และ M เราต้องหาหลายวิธีที่จะรวมเข้าด้วยกันเพื่อให้ได้รายการที่ถูกต้อง หากคำตอบมีขนาดใหญ่เกินไป ผลลัพธ์ที่ได้จะเป็นโมดูโล 10^9 + 7.
ดังนั้น หากอินพุตเป็น N =5 M =3 เอาต์พุตจะเป็น 56
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ret :=1
- สำหรับ i ในช่วง N + 1 ถึง N + M ให้ทำ
- ret :=ret * i
- สำหรับฉันในช่วง 1 ถึง M ให้ทำ
- ret :=ชั้นของ r/i
- รีเทิร์น ret mod (10^9 + 7)
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(N, M):
ret = 1
for i in range(N + 1, N + M + 1):
ret *= i
for i in range(1, M + 1):
ret //= i
return ret % (10**9 + 7)
N = 5
M = 3
print(solve(N, M)) อินพุต
5, 3
ผลลัพธ์
56