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

Python의 문자 타일 가능성

<시간/>

각 타일에 하나의 글자 타일[i]이 인쇄되어 있는 타일 세트가 있다고 가정합니다. 우리가 만들 수 있는 비어 있지 않은 문자 시퀀스의 수를 찾으십시오. 따라서 입력이 "AAB"이면 출력은 8이 됩니다. 시퀀스는 "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA"입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 카운트가 필요한 하나의 dfs() 정의
  • 합계 :=0
  • 1에서 26 사이의 i에 대해
    • count[i] =0이면 나머지를 확인하지 않고 다음 반복으로 이동합니다.
    • count[i]를 1로 줄이고 합계를 1로 늘립니다.
    • 합계 :=합 + dfs(개수)
    • count[i] 1 증가
  • 반환 합계
  • 실제 방법은 다음과 같습니다 -
  • 크기가 26인 하나의 카운트 배열을 만들고 0으로 채웁니다.
  • 타일의 각 요소 i에 대해
    • count[i – 'A' + 1] 1씩 증가
  • dfs(count)를 반환

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

class Solution(object):
   def numTilePossibilities(self, tiles):
      count = [0 for i in range(27)]
      for i in tiles:
         count[ord(i)-ord('A')+1]+=1
      return self.dfs(count)
   def dfs(self,count):
      summ = 0
      for i in range(1,27):
         if count[i]==0:
            continue
         count[i]-=1
         summ+=1
         summ+=self.dfs(count)
         count[i]+=1
      return summ
ob = Solution()
print(ob.numTilePossibilities("AAB"))

입력

"AAB"

출력

8