题目链接
英文链接:https://leetcode.com/problems/letter-tile-possibilities/
中文链接:https://leetcode-cn.com/problems/letter-tile-possibilities/
题目详述
你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i]。返回你可以印出的非空字母序列的数目。
示例 1:
1 | 输入:"AAB" |
示例 2:
1 | 输入:"AAABBC" |
提示:
- 1 <= tiles.length <= 7
- tiles 由大写英文字母组成
题目详解
- LeetCode47-全排列II 是求所有不重复的全排列,可以在这个的基础上对非空子母序列进行计数。
1 | public class LeetCode_01079 { |
- 可以换一种方法进行回溯。先用一个哈希表统计各个字母出现的个数,然后依次分配。
- 例如:对于输入 AAB。A = 2, B = 1。
- 长度为 1 时,可以选择 A 或 B,于是有了 A,B。
- 长度为 2 时
- 对于 A
- A = 1, B = 1。
- 可以选择 A 或 B,于是有了 AA,AB。
- 对于 B
- A = 2, B = 0。
- 只能选择 A,于是有了 BA。
- 对于 A
- 长度为 3 时
- 对于 AA
- A = 0, B = 1。
- 只能选择 B,于是有了 AAB。
- 对于 AB
- A = 1, B = 0。
- 只能选择 A,于是有了 ABA。
- 对于 BA
- A = 1, B = 0。
- 只能选择 A,于是有了 BAA。
- 对于 AA
- 所以对于输入 AAB,输出为 8,其他输入依此类推。
1 | public class LeetCode_01079 { |