• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

265
Views
Problema de combinación: dados dos enteros n y k, escriba un programa para devolver todas las combinaciones posibles de k números de 1 2 3 n

Estoy tratando de resolver un algoritmo simple usando JS:

Dados dos números n y k, tienes que encontrar todas las combinaciones posibles de k números de 1…n.

 Input : n = 5 k = 3 Output : 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5

Sin embargo, cuando probé este código usando JS, no obtengo el resultado esperado:

 let ans = [], arr = []; function makeCombination(n, k, low = 1) { if (k == 0) { ans.push(arr); console.log(...arr); return; } for (let i = low; i <= n; i++) { arr.push(i); makeCombination(n, k - 1, i + 1); arr.pop(); } return ans; } var n = 5; var k = 3; makeCombination(n, k);

Producción:

 1 2 3 1 2 4 1 2 5

¿Pueden ayudarme, por qué no obtengo el resultado esperado? Apreciaría cualquiera de su ayuda.

almost 3 years ago · Juan Pablo Isaza
2 answers
Answer question

0

 let ans = [], arr = []; function makeCombination(n, k, low = 1) { if (k == 0) { ans.push(arr.slice()); // console.log(...arr); commenting out the console log to demonstrate that the returned value is correct return; } for (let i = low; i <= n; i++) { arr.push(i); makeCombination(n, k - 1, i + 1); arr.pop(); } return ans; } var n = 5; var k = 3; makeCombination(n, k).map(a => console.log(...a));
 .as-console-wrapper { max-height: 100% !important; top: 0; }

Debe hacer una copia de la matriz de resultados parciales. De lo contrario, inserta una referencia a la misma matriz en la matriz de resultados y elimina los elementos durante su algoritmo de retroceso.

Una señal reveladora del problema fue que su función escribió los resultados correctos en la consola, pero la matriz de resultados devuelta se llenó con matrices vacías. Usando slice() haces una copia que evita este problema.

Editar: copió la técnica de formateo de la consola de Nina Scholz porque se ve mucho mejor.

almost 3 years ago · Juan Pablo Isaza Report

0

Además de usar algunas otras variables fuera de la función, puede tomar una función que devuelva una sola matriz.

 function makeCombination(n, k, i = 1) { const result = []; while (i <= n - k + 1) { if (k === 1) result.push([i]); else result.push(...makeCombination(n, k - 1, i + 1).map(a => [i, ...a])); i++; } return result; } makeCombination(5, 3).map(a => console.log(...a));
 .as-console-wrapper { max-height: 100% !important; top: 0; }

almost 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error