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

파이썬의 부분집합

<시간/>

숫자 집합이 있다고 가정합니다. 우리는 그 집합의 가능한 모든 부분집합을 생성해야 합니다. 이를 전원 세트라고도 합니다. 따라서 집합이 [1,2,3]과 같으면 거듭제곱 집합은 [[], [1], [2], [3], [1,2], [1,3], [2 ,3], [1,2,3]]

단계를 살펴보겠습니다 -

  • 재귀적 접근 방식을 사용하여 이 문제를 해결할 것입니다. 따라서 재귀 메서드 이름이 solve()라고 하고 숫자(nums), 임시 집합(temp), res 및 index 집합을 사용하는 경우
  • solve() 함수는 아래와 같이 작동합니다 -
  • index =length of nums인 경우 temp와 동일한 목록을 만들고 res에 삽입하고 반환
  • 온도[색인] :=0
  • 해결(숫자, 온도, 해상도, 인덱스 + 1)
  • 온도[색인] :=1
  • 해결(숫자, 온도, 해상도, 인덱스 + 1)
  • 주요 기능은 아래와 같습니다 -
  • res :=빈 목록
  • 숫자와 같은 크기의 임시 목록을 만들고 0으로 채웁니다.
  • 해결(nums, temp, res, 0) 호출
  • main_res :=빈 목록
  • temp_res의 모든 목록에 대해
    • temp :=빈 목록
    • for i :=0에서 목록의 길이까지
      • list[i] =1이면 temp에 nums[i]를 삽입합니다.
    • main_res에 temp 삽입
  • 기본 결과 반환

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

예시

class Solution(object):def 하위 집합(self, nums):temp_result =[] self.subsets_util(nums,[0 for i in range(len(nums))],temp_result,0) main_result =[] for temp_result의 목록:temp =[] for i in range(len(lists)):if 목록[i] ==1:temp.append(nums[i]) main_result.append(temp) return main_result def subsets_util(self, nums,temp,result,index):index ==len(nums):result.append([i for i in temp]) #print(temp) return temp[index] =0 self.subsets_util(nums,temp, 결과, 색인 + 1) 임시 [색인] =1 self.subsets_util(숫자, 임시, 결과, 색인 + 1)ob1 =솔루션()print(ob1.subsets([1,2,3,4])) 

입력

[1,2,3,4]

출력

[[], [4], [3], [3, 4], [2], [2, 4], [2, 3], [2, 3, 4], [1], [ 1, 4], [1, 3], [1, 3, 4], [1, 2], [1, 2, 4], [1, 2, 3], [1, 2, 3, 4] ]