Question
You have n tiles, where each tile has one letter tiles[i] printed on it.
Return the number of possible non-empty sequences of letters you can make using the letters printed on those tiles.
Example 1:
Input: tiles = "AAB"
Output: 8
Explanation:The possible sequences are "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA".
Plain Text
복사
Example 2:
Input: tiles = "AAABBC"
Output: 188
Plain Text
복사
Example 3:
Input: tiles = "V"
Output: 1
Plain Text
복사
My Answer
class Solution:
def numTilePossibilities(self, tiles: str) -> int:
self.path=[]
self.result=[]
tiles=sorted(list(tiles))
self.visited=[False]*len(tiles)
self.backtrack(tiles)
return len(self.result)-1
def backtrack(self,tiles:str):
self.result.append(self.path[:])
for i in range(len(tiles)):
if(self.visited[i]):
continue
if(i-1>=0 and tiles[i]==tiles[i-1] and not self.visited[i-1]):
continue
self.path.append(tiles[i])
self.visited[i]=True
self.backtrack(tiles)
self.path.pop()
self.visited[i]=False
Python
복사
Optimized Version
from itertools import permutations
class Solution:
def numTilePossibilities(self, tiles: str) -> int:
return sum(len(set(permutations(tiles, k))) for k in range(1, len(tiles)+1))
Python
복사