1. 程式人生 > >排列組合_排列_程式實現

排列組合_排列_程式實現

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    var arr = ['A', 'B', 'C'];
    // 所以情況的陣列
    var resultAll = [];
    /*
    * 從arr中選擇num個,當然 num >= 1 && num <= arr.length
    * */
function show(arr, num){ // 如果只選一個,那就是arr的個數了 if(num === 1){ arr.push(arr.length); return arr; } let resultNum = 0; // 遞迴的第幾層,也是選擇的第幾個數 let iNow = 1; /* * 遍歷+遞迴 * * */ function change(arr, iNow, str)
{
// 第一層有3個 ==> A B C for ( let i = 0; i < arr.length; i++ ){ // 複製,防止引用 let result = arr.concat(); // 複用字串,拼接,也放在出錯 let strClone = str; // 剔除當前值,還剩result.length - 1個 strClone += result.splice(i, 1
); // A // 是否停止遞迴,這裡以兩層為例 if(iNow === num){ // 停止 resultNum += result.length; // 這時候result中有 B/C for ( let j = 0; j < result.length; j++ ){ // 依次拼接 AB AC resultAll.push( strClone + result[j] ); } } else { // 注意這裡的result傳入之後,下次遞迴中的arr就變成result了 change(result, iNow + 1, strClone); } } } change(arr, iNow + 1, ''); // 把個數新增到結果末尾 resultAll.push(resultNum); return resultAll; } console.log(show(arr, 2)); // 3中2
</script> </body> </html>