假设我们有一组图块,每个图块上都印有一个字母图块[i]。查找我们可以制作的可能的非空字母序列的数量。因此,如果输入为“ AAB”,则输出为8。由于序列为“ A”,“ B”,“ AA”,“ AB”,“ BA”,“ AAB”,“ ABA”,“ BAA”
为了解决这个问题,我们将遵循以下步骤-
定义一个dfs()
,将计数
和:= 0
对于我在1到26之间的范围
如果count [i] = 0,则进行下一次迭代,而不检查其余部分
将count [i]减少1,并将总和增加1
sum:= sum + dfs(count)
将count [i]增加1
返还金额
实际的方法将是-
制作一个大小为26的计数数组,并用0填充
对于图块中的每个元素
将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