1079. 活字印刷

题目链接: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);
    }
};
posted @ 2023-05-20 13:05  lixycc  阅读(18)  评论(0)    收藏  举报