Demostrar la oferta de seguridad [27] - la disposición de la cuerda

título Descripción

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.

Introduzca una descripción:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

Esta pregunta nos ponemos a pensar en ello, asumiendo el título a toda la cadena es no repetir las letras , y luego solicitar que el tema de la disposición de varios cadena dada, esta vez tuvimos un arreglo debe ser capaz de pensar en usar una combinación de formas de resolver este título de la carretera.

En primer lugar, asumir la posición de cuatro letras cuatro tazas, suponiendo cuatro letras ABCD , la posibilidad de una copa se coloca primero cuatro letras (A, B, C, D ), tres segunda taza porque la primera copa se ha identificado con una letra, de modo que la segunda taza a tres opciones, y así sucesivamente, hay dos tercera copa, hay un cuarto de taza
\ [4 * 3 * 2 * 1 = 24 \]
Por lo tanto, un total de 24 posibilidades. Sin embargo, nos dará la reivindicación título disposición particular, y pueden tener cadenas duplicadas de letras, que pueden comprender la combinación de la disposición anterior, damos una manera específica de acuerdo con el orden alfabético.

Por ejemplo, suponiendo una cadena título es ABCD , podemos utilizar la primera letra del alfabeto cuatro posiciones como intercambio de una posición derivada de la primera letra:
\ [ABCD, BACD, CBAD, el DBCA \ ]
como hemos llegado a cuatro, entonces tenemos que considerar qué posición es la segunda letra, debido al tipo excesiva, aquí sólo se ABCD, por ejemplo (los tres restantes empatía):
\ [ABCD, ACBD, ADCB \]
como hemos llegado a tres, y luego decidir cuál es el siguiente carta es la cuarta posición, las razones anteriores, sólo ABCD Por ejemplo:
\ [ABCD, ABCD \]
como hemos llegado a dos, entonces el siguiente no vemos la necesidad, y la cuarta posición no es sólo una posibilidad.

Si usted entiende la derivación anterior, la siguiente parte del código debe ser capaz de leer el

function Permutation(str)
{
    // 判空操作
    if(str.length==0){return [];}
    const letters = str.split('');
    let res = [];
    function perm(list, start){
        if(start === letters.length-1){
            const str = list.join('');
            // 有可能会有重复字母,所以做查重处理
            if(!res.includes(str)){
                res.push(str);
            }
        }
        for(let i=start; i<list.length; i++){
            [list[i], list[start]] = [list[start], list[i]];
            perm(list, start+1);
            // 还原原有列表排序,以免影响后续计算
            [list[i], list[start]] = [list[start], list[i]];
        }
    }
    perm(letters, 0);
    // 按照字典序排序输出
    return res.sort((a,b)=>{return a>b?1:-1});
}

Supongo que te gusta

Origin www.cnblogs.com/Jacob98/p/12535464.html
Recomendado
Clasificación