题目链接:1079. 活字印刷
方法:计数 + 回溯
解题思路
先统计字符串中每种字符的个数 cnt[26]{}
,对于每一层统计本层的节点,对应一种字符序列,再加上某节点的子节点的数量,返回最终结果
代码
class Solution {
public:
int numTilePossibilities(string tiles) {
int cnt[26]{};
for (char c : tiles) {
++cnt[c - 'A'];
}
function<int(int* cnt)> dfs = [&](int* cnt) -> int {
int res = 0;
for (int i = 0; i < 26; ++i) {
if (cnt[i] > 0) {
++res; // 本层节点加一
--cnt[i];
res += dfs(cnt); // 统计该节点的子节点数
++cnt[i];
}
}
return res;
};
return dfs(cnt);
}
};
标签:cnt,1079,int,res,++,活字印刷,节点
From: https://www.cnblogs.com/lxycoding/p/17417073.html