Pergunta

Eu estou tentando gerar todos os possíveis números começando com um vetor de dígitos que eu não quero ocorrer mais de quantas vezes eles estão no vetor .Meu primeiro ideea foi de retrocesso, mas como....Por exemplo:3 7 5 => 3 5 7 35 37 53 57 73 75 357 375 537 573 735 753

Foi útil?

Solução

Basicamente, eu gostaria de usar uma função recursiva que selecciona cada número a partir do vetor acrescenta que o número para o resultado e o uso reduzido de vetor e o número como "prefixo" na chamada recursiva.O resultado que eu gostaria de filtro depois de dublicates com uma única função, como Valores exclusivos em uma matriz

function selectOne(data,res,prependNumber){
  var current,reduced,i,len;
  for(i=0,len = data.length;i<len;i++){
    current = data[i];
    if(prependNumber!==false){
      current = prependNumber+ '' + current;
    }
    reduced = data.slice(0);
    reduced.splice(i,1);
    res.push(parseInt(current));
    selectOne(reduced,res,current);
  }
}
function onlyUnique(value, index, self) { 
    return self.indexOf(value) === index;
}

Exemplo de chamada

var test = [3,5,7];
var res = [];
selectOne(test,res,false);
console.log(res.filter( onlyUnique ));

O algorythm obras seguintes.

  1. Tome a matriz de entrada e passo sobre ela
  2. gerar uma nova matriz reduzida do elemento dessa iteração
    • Eu uso .fatia(0) para clonar a entrada real da matriz, porque o corte gera uma nova matriz começando com o índice fornecido
    • Eu uso .emenda para extrair 1 Elemento começando na posição i
  3. Empurre o número para o resultado
  4. Utilize o reduzida da matriz para chamar a função novamente e use o atual número de iteração, para acrescentar que quando eu arrastar o próximo número e empurrar para o resultado

E. g.Tome a matriz de entrada [3,5,7].Eu iterar sobre ele.Primeiro eu pegar 3 e gerar reduzida da matriz [5,7].Eu empurrar a 3 para o resultado e chamar de meu função recursivelly com essa matriz e 3 como prependNumber.No ciclo I, em seguida, selecione primeiro o 5, mas devido a eu ter dado a prependNumber eu não pressione 5 para o resultado, mas 35 e ter uma reduzida da matriz [7].E assim por diante.

A seguir recursão terá lugar:

selectOne - level 1
res: [3]
selectOne - level 2
res: [3,35]
selectOne - level 3
res: [3,35,357]
selectOne - level 2
res: [3,35,357,37]
selectOne - level 3
res: [3,35,357,37,375]
selectOne - level 1
res: [3,35,357,37,375,5]
selectOne - level 2
res: [3,35,357,37,375,53]
selectOne - level 3
res: [3,35,357,37,375,53,537]
selectOne - level 2
res: [3,35,357,37,375,53,537,57]
selectOne - level 3
res: [3,35,357,37,375,53,537,57,573]
.
.
.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top