你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i]。返回你可以印出的非空字母序列的数目。
注意:本题中,每个活字字模只能使用一次。
示例 1:
输入:"AAB"
输出:8
解释:可能的序列为 "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA"。
示例 2:
输入:"AAABBC"
输出:188
解题思路:1。全排列+set判重是可以的,
2 。使用 sort排序判重
3 hash判重
class Solution {
public:
int ans = 0;
void DFS(int hash[]){
for(int i=0;i<26;i++){
if(hash[i]==0)
continue;
ans++;
hash[i]--;
DFS(hash);
hash[i]++;
}
}
int numTilePossibilities(string tiles) {
int hash[26]={0};
for(int i=0;i<tiles.size();i++)
hash[tiles[i]-'A']++;
DFS(hash);
return ans;
}
};