PHP Array Combinations
Você recebe uma matriz de 7 números (1,2,4,5,6,7). O objetivo é encontrar todas as combinações possíveis de 5 números dessa matriz. Cada combinação deve ser única, o que significa que nenhuma duplicata é permitida. Por exemplo, (1,2,3,4,5) e (5,4,3,2,1) são considerados a mesma combinação. Veja como funciona:
classe Combinações implementa o iterador { $ c = nulo; // combinação de números $ s = nulo; // Matriz de origem $ n = 0 protegido; // número de elementos na matriz $ k = 0; // número de elementos em cada combinação $ pos POS = 0; // posição atual do iterador função __construct ($ s, $ k) { // Inicialize as propriedades da classe if (is_array ($ s)) { $ this-> s = Array_values ($ s); $ this-> n = count ($ this-> s); } outro { $ this-> s = (string) $ s; $ this-> n = strlen ($ this-> s); } $ this-> k = $ k; $ this-> rewind (); } // retorna a chave atual função key () { retornar $ this-> pos; } // retorna o valor atual função atualmente () { $ r = array (); para ($ i = 0; $ i k; $ i) $ r [] = $ this-> s [$ this-> c [$ i]]; retornar is_array ($ this-> s)? $ R: Implode ('', $ R); } // mova -se para a próxima combinação função a seguir () { if ($ this-> _ Next ()) $ this-> pos; outro $ this-> pos = -1; } // rebobinar para a primeira combinação função rewind () { $ this-> c = intervalo (0, $ this-> k); $ this-> pos = 0; } // Verifique se o iterador é válido (em uma posição válida) função válida () { retornar $ this-> pos> = 0; } // mova -se para a próxima combinação (função interna) função protegida _next () { $ i = $ this-> k - 1; while ($ i> = 0 & amp; & amp; $ this-> c [$ i] == $ this-> n-$ this-> k $ i) $ i--; se ($ i c [$ i]; while ($ i k - 1) $ this-> c [$ i] = $ this-> c [$ i-1] 1; retornar true; } } // Crie um objeto de combinações para a matriz dada e número de elementos por combinação $ combinações = novas combinações ("1234567", 5); // itera sobre todas as combinações possíveis e impede -as foreach ($ combinações como $ substring) echo $substring, ' ';This code produces the following output:
12345 12346 12347 12356 12357 12367 12456 12457 12467 12567 13456 13457 13467 13567 14567 23456 23457 23467 23567 24567 34567
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3