leetcode 1079. 活字印刷

时间:2019-06-18
本文章向大家介绍leetcode 1079. 活字印刷,主要包括leetcode 1079. 活字印刷使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目描述:

你有一套活字字模 tiles,其中每个字模上都刻有一个字母 tiles[i]。返回你可以印出的非空字母序列的数目。

示例 1:

输入:"AAB"
输出:8
解释:可能的序列为 "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA"。

示例 2:

输入:"AAABBC" 输出:188 

提示:

  • 1 <= tiles.length <= 7
  • tiles 由大写英文字母组成

解法:

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);
    }
};

原文地址:https://www.cnblogs.com/zhanzq/p/11044966.html