题目描述
https://leetcode-cn.com/problems/letter-tile-possibilities/
解题思路
首先要用 map 记录字符串中各大写字母出现的次数。每次从map中取出一个字符个数不为 0 的字符(不同的字符对应着不同的字符串排列可能),取到一个字符后,要将字符个数减 1,进入下一次 DFS 迭代。
实现
class Solution {
public:
void dfs(map<char,int>& mp, int& num){
for(auto& m:mp){//这里一定要是引用!!!!否则只是修改了m,并不会修改mp
if(m.second)
{
++num;
--m.second;
dfs(mp, num);
++m.second;
}
}
}
int numTilePossibilities(string tiles) {
int num=0, i=0;
map<char,int> mp;
while(tiles[i]!='\0'){
mp[tiles[i]]++;
++i;
}
dfs(mp,num);
return num;
}
};