Blog 2: padrão de conjunto de subconjuntos e energia
O retorno é especialmente poderoso para problemas, onde precisamos explorar todos os subconjuntos ou combinações possíveis de elementos. Este é um dos padrões mais fundamentais e reutilizáveis em entrevistas de codificação. 🔹 Definição de problemas Dado um conjunto de elementos, gerar todos os subconjuntos (o conjunto de energia). 📌 Exemplo: entrada: [1, 2, 3]Saída: [[]Assim, [1]Assim, [2]Assim, [3]Assim, [1,2]Assim, [1,3]Assim, [2,3]Assim, [1,2,3]]🔹 Intuição Cada elemento tem duas opções: inclua -a no subconjunto. Exclua -o do subconjunto. 👉 Isso forma uma árvore de decisão binária, levando a subconjuntos de 2^n para n elementos. 🔹 Modelo universal para subconjuntos void backtrack (índice int, lista
backtrack (índice + 1, corrente, nums, resultados); // 2. Inclua nums[index]
Current.add (nums[index]); backtrack (índice + 1, corrente, nums, resultados); // desfazer a escolha de Current.remove (current.size () – 1); } Digite Modo de tela cheia de saída Modo de tela cheia 🔹 Implementação de java – conjunto de energia Importar java.util.*; classe pública Subsetspattern {Lista pública
[]
/ \
[] [1]
/ \ / \
[] [2] [1] [1,2]
Digite o modo de saída de tela cheia no modo de tela cheia 📌 Os caminhos representam opções → Cada folha é um subconjunto. 🔹 Variações em entrevistas subconjuntos com duplicatas Entrada: [1,2,2]
Evite subconjuntos duplicados. Use a classificação + pular duplicatas. private void backtrackdup (int start, list
if (i > Start && nums[i] == NUMS[i – 1]) continuar; // pular a duplicata Current.add (NUMS[i]); backTrackDup (i + 1, corrente, nums, resultados); Current.Remove (Current.size () – 1); }} Digite o modo de tela cheia de saída de tela cheia subconjuntos de tamanho K entrada: nums =[1,2,3]k = 2 saída: [ [1,2]Assim, [1,3]Assim, [2,3] ]private void backtrackk (int start, int k, lista