Python中的字母平铺可能性

假设我们有一组图块,每个图块上都印有一个字母图块[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