原题说明
You have a set of 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.
Example 1:
Input: “AAB”
Output: 8
Explanation: The possible sequences are “A”, “B”, “AA”, “AB”, “BA”, “AAB”, “ABA”, “BAA”.
Example 2:
Input: “AAABBC”
Output: 188
Note:
1 <= tiles.length <= 7
tiles
consists of uppercase English letters.
解题思路
采用递归的方式。用一个长度为26的vector<int> ch_count
来记录当前剩余的每一个字母及对应的个数。
在递归函数dfsCount
中,用int count
表示当前ch_count
能够组成的序列数,
遍历ch_count
,每一个对应个数不为零的字母可以加入组合中,count++
,对应的字母个数减一,然后调用递归函数。
调用完毕后,不要忘记backtracing,对应字母的个数应当恢复原样(加一)。
示例代码 (cpp)
1 | class Solution { |
示例代码 (java)
1 | class Solution { |
示例代码 (python)
1 | class Solution: |
复杂度分析
时间复杂度: O(26^N)
, N
为tiles
的长度
空间复杂度: O(1)
, 栈的深度为O(N)
视频讲解
我们在Youtube上更新了视频讲解,欢迎关注!