Algoritmo de permutación que crea una matriz de todas las permutaciones.

La permutación se puede resolver en un algoritmo típico de Backtrack en el que tenemos que atravesar todas las posibilidades en el espacio de estado . Backtrack es un algoritmo muy importante y mi sugerencia es que lo eche un vistazo (generalmente en forma de recursión) e intente dominar la idea básica, en lugar de tratar de resolver el problema de permutación a su manera.

Básicamente, para encontrar una permutación, tenemos que caminar n pasos (establecer un bit es un paso), después de elegir un bit para cada paso, tenemos una permutación, por lo que tenemos una posible solución (por ejemplo, es 1,2,3,4,5,6). Después de eso, retrocedemos al segundo último bit, tenga en cuenta que elegimos 5nuestra primera solución, pero podemos tener otra opción 6, después de eso solo tenemos una opción para el último bit que es 5. Para otras soluciones, seguimos retrocediendo hasta el tercer último bit, el cuarto último bit ... y así sucesivamente. Esa es la razón por la cual se nombra backtrack.

Puede comparar backtrack con DFS o algoritmo traveral en un árbol binario. En muchos lugares son muy similares entre sí.

A continuación se muestra mi solución para este problema en el que el resultado es un arrayList y la permutación se da de acuerdo con, en 1...nlugar de 0...n-1, pero el pensamiento es exactamente el mismo.

class Solution {
public List<List<Integer>> permute(int[] nums) {
    List<List<Integer>> permutations=new ArrayList();
    backtrack(permutations,new ArrayList<Integer>(),nums);
    return permutations;
}

private void backtrack(List<List<Integer>> permutations,List<Integer> tempList,int[] nums){
    if(tempList.size()==nums.length){
        permutations.add(new ArrayList<Integer>(tempList));
        return;
    }

    for(int i=0;i<nums.length;i++){
        if(tempList.contains(nums[i])){
            continue;
        }

        tempList.add(nums[i]);    
        backtrack(permutations,tempList,nums);
        tempList.remove(tempList.size()-1);
    }

}

}

Respuesta 1

Tengo un TableView en una aplicación TornadoFX. Este TableView muestra una lista de pruebas y su estado (no iniciado, iniciado, aprobado, reprobado). Quiero que las filas de las pruebas aprobadas sean verdes, y las filas de ...

Cuando uso el código Selenium 2 (Java) para abrir Firefox (o cualquier otro navegador) para algunas pruebas automáticas, la nueva ventana se abre sin mis marcadores o, para el caso, la barra de marcadores. Además, yo ...

for (String header: headers) {for (int i = 0; i <dataList.get (0) .size (); i ++) {String s = dataList.get (0) .get (i); Cadena h = encabezado; ...

Estoy desarrollando una aplicación con JAVA y PHP. Llamo al archivo php desde la clase JAVA, el php ejecuta consultas en el ddbb y devuelve el resultado. El problema es que no devuelve los caracteres ...