Likou —— 1641. Conte o número de sequências de vogais do dicionário

Descrição da pergunta

Dado um número inteiro n, retorne o número de strings de comprimento n consistindo apenas de vogais (a, e, i, o, u) e organizadas em ordem lexicográfica .

A ordenação lexicográfica da string s requer que para todo i válido, a posição de s[i] no alfabeto seja sempre a mesma que s[i+1] ou antes de s[i+1].

Fonte: LeetCode
Link: https://leetcode.cn/problems/count-sorted-vowel-strings
Os direitos autorais pertencem à LeetCode Network. Para reimpressão comercial, entre em contato com o autorizador oficial. Para reimpressão não comercial, indique a fonte.

Abstraído em um problema matemático, é: dado o número de tipos de elementos (5), o número de dígitos a serem organizados (n) e a regra de organização (ordem lexicográfica). Encontre o número de permutações e combinações.

Primeiro, vários conjuntos de soluções são fornecidos para facilitar a verificação:
n=1------5
2------15
3------35
4------70
5--- -- -126

Princípio do método de partição

Comecei a aprender o método de partição para lidar com o problema de colocar n bolas indiferenciadas em k caixas diferentes.
As condições para aplicação do método de partição são:

  1. n bolas são iguais
  2. k caixas são diferentes umas das outras
  3. Cada caixa recebe pelo menos um elemento
    . Como há n bolas, há n-1 lugares onde os tabuleiros podem ser colocados. Há um total de k tabuleiros a serem colocados. O número total de resultados é: C n − 1 k C ^k _{n-1}Cn 1k

Verifica-se que a questão não atende à condição 3, portanto podemos colocar uma bola em cada caixa antecipadamente e preencher o método de partição de elementos.
Pode-se entender que primeiro existem n + k bolas, e elas são colocadas em k caixas de acordo com o método de partição. Então, haverá uma situação em que apenas 1 bola é armazenada em uma ou mais caixas. Em seguida, pegamos de cada uma. caixa. Uma bola é lançada e um total de K peças são retiradas. Então a situação das bolas restantes neste momento é equivalente à situação de colocar apenas k bolas e deixar a caixa ficar vazia.

responder a perguntas

Para esta questão, pense em n bits como n bolas idênticas e 5 letras como 5 caixas. Em última análise, isso se traduz na inserção de 4 partições em n+5 - 1 vagas para dividir as bolas em 5 pilhas.
Portanto, a solução para este problema é C n + 4 4 C ^4 _{n+4}Cn + 44

É possível não usar o método de partição preenchida com elementos? Claro que pode, mas isso exigiria uma discussão confidencial, a saber:

  1. 4 caixas estão vazias: C 5 4 × 1 C ^4 _5 \times 1C54×1 . Primeiro selecione 4 caixas vazias e depois coloque as bolas restantes na caixa não vazia. (n>=1)
  2. 3 caixas estão vazias: C 5 3 × C n − 1 1 C ^3 _5 \times C ^1_{n-1}C53×Cn 11. Selecione também primeiro 3 caixas vazias, depois divida as bolas restantes em duas pilhas, ou seja, insira uma divisória. (n>=2)
  3. 2 caixas estão vazias: C 5 2 × C n − 1 2 C ^2 _5 \times C ^2_{n-1}C52×Cn 12。(n>=3)
  4. 1 caixa está vazia: C 5 1 × C n − 1 3 C ^1 _5 \times C ^3_{n-1}C51×Cn 13。(n>=4)
  5. 0 caixas estão vazias: C n − 1 4 C ^4_{n-1}Cn 14。(n>=5)

Em seguida, some todas as categorias para obter o resultado final, que é simplificado para 1 24 × ( n 4 + 10 n 3 + 35 n 2 + 50 n + 24 ) \frac{1}{24} \times (n^4 + 10n^3+35n^2+50n+24)241×( n4+10 n3+35 n2+50 n+24 ) . ComC n + 4 4 C ^4 _{n+4}Cn + 44Obteve o mesmo resultado.
No entanto, por uma questão de rigor, esta abordagem requer a substituição de n=1,2,3,4,5 na fórmula, respectivamente, para verificar se a fórmula é satisfeita.

O programa está escrito da seguinte forma:

class Solution {
    
    
public:
    int countVowelStrings(int n) {
    
    
        return (n + 4) * (n + 3) * (n + 2) * (n + 1) / 24;
    }
};

おすすめ

転載: blog.csdn.net/2201_75691823/article/details/129843145