Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 순서가 변경되지 않도록 두 목록을 병합할 수 있는 여러 가지 방법을 찾는 프로그램

<시간/>

두 개의 목록 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
  • N + 1 ~ N + M 범위의 i에 대해
    • ret :=ret * i
  • 1~M 범위의 i에 대해 다음을 수행합니다.
    • ret :=r/i의 바닥
  • ret 모드(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