使用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. ThestartIndex
parameter is crucial for this. - Permutation Generation: Uses a recursive helper function
generatePermutationsHelper
to generate