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);
    }
};
posted @ 2019-06-18 14:28  zhanzq1  阅读(378)  评论(0)    收藏  举报