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

Python의 조합 합계

<시간/>

후보 번호 집합(모든 요소가 고유함)과 대상 번호가 있다고 가정합니다. 후보 번호가 주어진 목표와 합해지는 후보에서 모든 고유한 조합을 찾아야 합니다. 동일한 반복 번호는 후보자 중에서 무제한으로 선택할 수 있습니다. 따라서 요소가 [2,3,6,7]이고 대상 값이 7이면 가능한 출력은 [[7], [2,2,3]]

입니다.

단계를 살펴보겠습니다 -

  • 우리는 이것을 재귀적으로 해결할 것입니다. 재귀 함수의 이름은 solve()입니다. 이것은 결과를 저장하기 위한 배열, 레코드를 유지하기 위한 하나의 맵, 대상 값 및 고유한 요소 목록을 사용합니다. 처음에는 res 배열과 맵이 비어 있습니다. 해결 방법은 아래와 같이 작동합니다 -

  • 대상이 0이면
    • temp :=목록에 있는 요소 목록
    • temp1 :=temp, temp 정렬
    • temp가 맵에 없으면 맵에 temp를 삽입하고 값을 1로 설정하고 temp를 res에 삽입
    • 반환
    • temp <0이면 반환
    • i 범위의 x에서 요소 목록의 길이까지,
      • 요소[x]를 현재에 삽입
      • 해결(요소, 대상 – 요소[x], 해상도, 지도, i, 현재)
      • 색인의 현재 목록에서 요소 삭제(현재 길이 – 1)

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

class Solution(object):
   def combinationSum(self, candidates, target):
      result = []
      unique={}
      candidates = list(set(candidates))
      self.solve(candidates,target,result,unique)
      return result
   def solve(self,candidates,target,result,unique,i = 0,current=[]):
      if target == 0:
         temp = [i for i in current]
         temp1 = temp
         temp.sort()
         temp = tuple(temp)
         if temp not in unique:
            unique[temp] = 1
            result.append(temp1)
         return
      if target <0:
         return
      for x in range(i,len(candidates)):
         current.append(candidates[x])
         self.solve(candidates,target-candidates[x],result,unique,i,current)
         current.pop(len(current)-1)
ob1 = Solution()
print(ob1.combinationSum([2,3,6,7,8],10))

입력

[2,3,6,7,8]
10

출력

[[2, 8], [2, 2, 2, 2, 2], [2, 2, 3, 3], [2, 2, 6], [3, 7]]