Oferta veintisiete demostrar la seguridad: arreglo de cuerdas

trabajo informal

Una entrada de cadena, imprime todas las permutaciones de los caracteres de la cadena en orden lexicográfico. Por ejemplo abc cadena de entrada, abc imprimir todas las cadenas de caracteres a, b, c se pueden organizar a cabo, acb, bac, bca, cab y CBA.

pensamiento

Vamos a las ideas de todos los días para resolverlo. A algunos les gusta hacer en la escuela secundaria en el pedido combinaciones para un número determinado de tres en busca de su orden de publicación diferente, que normalmente hacemos es decir, la primera fijado un número, y luego tomar un descanso especie de una combinación de números, a continuación, insertado en el mismo bc ejemplo bc y cb han clasificado y luego insertado en una ubicación en la que habrá tres seis tipos de resultados deseados. Otra idea es decir que continuaremos con espalda con el primer intercambio digital, después de cada cambio de los dos restantes fueron dispuestas en un arreglo se convierte en una de tres veces.
Aquí estamos pensando en la manera de aplicar el segundo método: En primer lugar, aa cambio, lo que equivale a un llevar a cabo una solución. Entonces, después de BC (los dos) para dar dos resultados de cambio, a continuación, cambiar ab, b para una, y ac fijo (los dos últimos) intercambiados. Finalmente intercambio ac, c fijo, ab (después de dos posiciones de conmutación)
esta vez podemos escribir la primera porción pseudocódigo

for(int i=j;i<num.length;i++){
swap(num,i,j);
}
private void swap(int num[],int i,int j){
}

Entonces que es para la última parte del intercambio, podemos tomar ventaja de los cambios en el valor de la recursividad para resolver. Código es el siguiente

import java.util.ArrayList;
import java.util.*;
public class Solution {
     public ArrayList<String> Permutation(String str) {
       ArrayList<String> array=new ArrayList<String>();
    
        all(str.toCharArray(),0,array);
          Collections.sort(array);   
        return array;
        
    }
    private void all(char [] ch,int i,ArrayList<String> array)
    {
        if(i==ch.length-1){
            String val=String.valueOf(ch);
            if(!array.contains(val))
                array.add(val);
        }
        else{
            for(int j=i;j<ch.length;j++){
            swap(ch,i,j);
            all(ch,i+1,array);
            swap(ch,i,j);
        }
        }
        
    }
    private void swap(char [] ch,int i,int j){
        char temp=ch[i];
        ch[i]=ch[j];
        ch[j]=temp;
    }
}
	```
Publicado 47 artículos originales · ganado elogios 28 · vistas 2703

Supongo que te gusta

Origin blog.csdn.net/weixin_44015043/article/details/105370824
Recomendado
Clasificación