[Leetcode 60 días con pincel] algoritmo de seguimiento del día 24 - 77. Combinación

 


 Bases teóricas:

¿Qué es retroceder?

El método de retroceso también se puede denominar método de búsqueda de retroceso, que es un método de búsqueda.

Problemas resueltos por retroceso

El método de retroceso generalmente puede resolver los siguientes problemas:

  • Problema de combinación: Encuentra el conjunto de k números en N números según ciertas reglas
  • Problema de corte: hay varias formas de cortar una cuerda de acuerdo con ciertas reglas
  • Problema de subconjunto: ¿Cuántos subconjuntos elegibles hay en un conjunto de N números?
  • Problema de ordenación: N números están ordenados de acuerdo a ciertas reglas, hay varias formas de ordenación
  • Problemas de tablero: N Queens, Resolver Sudoku y más

¿Cómo entender el retroceso?

Los problemas resueltos por el método de retroceso se pueden abstraer en una estructura de árbol Sí, quiero decir que todos los problemas resueltos por el método de retroceso se pueden abstraer en una estructura de árbol.

Debido a que el método de retroceso se trata de buscar recursivamente subconjuntos en el conjunto, el tamaño del conjunto constituye el ancho del árbol, la profundidad de la recursividad y la profundidad del árbol .

La recursividad debe tener una condición de terminación, por lo que debe ser un árbol de altura limitada (árbol N-ario).


  tema:

77. Combinación

Dados dos enteros  n y  sum k, devuelve  [1, n] todas las combinaciones posibles  k de números en el rango.

Puede devolver las respuestas en  cualquier orden  .

Ejemplo 1:

Entrada: n = 4, k = 2
 Salida: 
[ 
  [2,4], 
  [3,4], 
  [2,3], [ 
  1,2], 
  [1,3], 
  [1,4], 
]

Ejemplo 2:

Entrada: n = 1, k = 1
 Salida: [[1]]

pista:

  • 1 <= n <= 20
  • 1 <= k <= n

Proceso de pensamiento y puntos de conocimiento: 

Cada vez que se selecciona un elemento de la colección, el rango seleccionable se reduce a medida que avanza la selección y el rango seleccionable se ajusta .

En la figura se puede encontrar que n es equivalente al ancho del árbol, y k es equivalente a la profundidad del árbol .

Cada vez que se busca un nodo hoja en el gráfico, hemos encontrado un resultado .

Es equivalente a solo necesitar recopilar los resultados que llegan a los nodos hoja para obtener el conjunto combinado de k números de n números.


 respuesta:

class Solution {
private:
    vector<vector<int>> result; // 存放符合条件结果的集合
    vector<int> path; // 用来存放符合条件结果
    void backtracking(int n, int k, int startIndex) {
        if (path.size() == k) {
            result.push_back(path);
            return;
        }
        for (int i = startIndex; i <= n; i++) {
            path.push_back(i); // 处理节点
            backtracking(n, k, i + 1); // 递归
            path.pop_back(); // 回溯,撤销处理的节点
        }
    }
public:
    vector<vector<int>> combine(int n, int k) {
        result.clear(); // 可以不写
        path.clear();   // 可以不写
        backtracking(n, k, 1);
        return result;
    }
};


¡Bienvenido a dar me gusta, marcar, comentar, su aliento es la mayor motivación para mi creación! (๑╹◡╹)ノ"""

Declaración de derechos de autor: este artículo es un artículo original del blogger de CSDN "Dumengjiu", que sigue el acuerdo de derechos de autor CC 4.0 BY-SA. Para reimprimirlo, adjunte el enlace de la fuente original y esta declaración.
Enlace original: Dumengjiu's blog_CSDN blog-csdn domain blogger

Supongo que te gusta

Origin blog.csdn.net/weixin_53310927/article/details/131355906
Recomendado
Clasificación