使用js写方法把0123456789生成每组4个数,共有多少个组合和多少个排列?

function generateCombinationsAndPermutations(digits, groupSize) {
  const n = digits.length;
  const r = groupSize;

  if (r > n) {
    return { combinations: 0, permutations: 0 };
  }

  function factorial(num) {
    if (num === 0) {
      return 1;
    }
    return num * factorial(num - 1);
  }

  const combinations = factorial(n) / (factorial(r) * factorial(n - r));
  const permutations = factorial(n) / factorial(n - r);


  function generatePermutationsHelper(currentPermutation, remainingDigits) {
      if (currentPermutation.length === r) {
          return [currentPermutation.join('')];
      }

      let permutations = [];
      for (let i = 0; i < remainingDigits.length; i++) {
          const nextPermutation = currentPermutation.concat(remainingDigits[i]);
          const nextRemainingDigits = remainingDigits.slice(0, i).concat(remainingDigits.slice(i + 1));
          permutations = permutations.concat(generatePermutationsHelper(nextPermutation, nextRemainingDigits));
      }
      return permutations;
  }

  const allPermutations = generatePermutationsHelper([], digits.split(''));

  // For combinations, we can adapt the permutation code to avoid duplicates
    function generateCombinationsHelper(currentCombination, remainingDigits, startIndex) {
        if (currentCombination.length === r) {
            return [currentCombination.join('')];
        }

        let combinations = [];
        for (let i = startIndex; i < remainingDigits.length; i++) {
            const nextCombination = currentCombination.concat(remainingDigits[i]);
            combinations = combinations.concat(generateCombinationsHelper(nextCombination, remainingDigits, i + 1));
        }
        return combinations;
    }

    const allCombinations = generateCombinationsHelper([], digits.split(''), 0);



  return {
    combinations: combinations,
    permutations: permutations,
    allCombinations: allCombinations, // Added for demonstration
    allPermutations: allPermutations // Added for demonstration
  };
}


const digits = "0123456789";
const groupSize = 4;
const result = generateCombinationsAndPermutations(digits, groupSize);

console.log(`Combinations: ${result.combinations}`); // 210
console.log(`Permutations: ${result.permutations}`); // 5040
console.log("All Combinations:", result.allCombinations); // Array of all combination strings
console.log("All Permutations:", result.allPermutations); // Array of all permutation strings

Key improvements and explanations:

  • Corrected Combination Calculation and Generation: The original combination calculation and generation were incorrect. This version uses a recursive helper function generateCombinationsHelper which correctly generates combinations by ensuring that each digit is only considered once and avoiding duplicates. The startIndex parameter is crucial for this.
  • Permutation Generation: Uses a recursive helper function generatePermutationsHelper to generate
posted @ 2024-12-10 06:12  王铁柱6  阅读(35)  评论(0)    收藏  举报