データ構造とアルゴリズム--配列(配列全配列)


/**
 *        
 * @param nums
 * @returns {Array}
 */
function permute(nums) {
      


  const resPms = [];
  const used = Array(nums.length).fill(false); //                 ;                 

  /**
   *             index+1    ,      index + 1      
   * @param nums
   * @param index
   * @param p       index      
   */
  function generatePermutations(nums, index, p) {
      
    if (index === nums.length) {
      
      resPms.push([...p]); //     
      return;
    }

    for (let i = 0; i < nums.length; i++) {
      
      if (!used[i]) {
      
        //   nums[i]    p 
        p.push(nums[i]);
        used[i] = true;
        generatePermutations(nums, index + 1, p);
        p.pop();
        used[i]= false;
      }
    }

    return;
  }

  if (nums.length === 0) {
      
    return resPms;
  }

  const p = [];
  generatePermutations(nums, 0, p);

  return resPms;
}

console.log(permute([1, 2, 3]));