说明:本文是根据自己在 LeetCode 中文网站上发布的题解写成的,即自己转载了自己的文章。
原文地址:
https://leetcode-cn.com/problems/letter-tile-possibilities/solution/hui-su-suan-fa-python-dai-ma-by-liweiwei1419/
这道题与 LeetCode 第 90 题很像,把 LeetCode 第 90 题的每一个解变成排列,就是这道题了。
由于是排列,我们不难想到,解决这个问题的思路应该是一个树形结构。不妨先从规模小的问题入手,以题目示例 1 的输入:“AAB”为例,可以画出树形图如下。
我们只要一开始做一个字母频次统计,如果当前这个字母的频次为 ,就不再往下执行,马上要回溯了,在回溯的过程中一定要记得状态重置。
class Solution:
def numTilePossibilities(self, tiles: str) -> int:
counter = [0] * 26
for alpha in tiles:
counter[ord(alpha) - ord('A')] += 1
return self.__dfs(counter)
def __dfs(self, counter):
res = 0
for i in range(26):
if counter[i] == 0:
continue
res += 1
counter[i] -= 1
res += self.__dfs(counter)
counter[i] += 1
return res