leetcode 1079. 活字印刷
题目描述:
你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i]。返回你可以印出的非空字母序列的数目。
示例 1:
输入:"AAB"
输出:8
解释:可能的序列为 "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA"。
示例 2:
输入:"AAABBC"
输出:188
```
**提示:**
+ `1 <= tiles.length <= 7`
+ `tiles` 由大写英文字母组成
---
# 解法:
```cpp
class Solution {
public:
int getNumber(vector<int>& cnt, int left){
if(left <= 1){
return left;
}else{
int res = 0;
for(int& val : cnt){
if(val > 0){
val--;
res += getNumber(cnt, left-1)+1; // +1 for different length string
val++;
}
}
return res;
}
}
int numTilePossibilities(string tiles) {
// '', 'A', 'B', 'AA', 'AB', 'BA', 'BB'
vector<int> cnt(26, 0);
int left = tiles.size();
for(char ch : tiles){
cnt[ch - 'A']++;
}
return getNumber(cnt, left);
}
};

浙公网安备 33010602011771号