极客时间返利平台,你可以在上边通过山月的链接购买课程,并添加我的微信 (shanyue94) 领取返现。

# 写一个关于全排列,全组合的函数

Issue

欢迎在 Gtihub Issue 中回答此问题: Issue 187 (opens new window)

# Arragement

# Combination

全排列

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permute = function (nums) {
  let result = [];
  let used = Array.from({ length: nums.length }).fill(false);
  function search(collection, used) {
    if (collection.length === nums.length) {
      result.push(collection);
      return;
    }
    for (let i = 0; i < nums.length; i++) {
      if (used[i] === false) {
        used[i] = true;
        search(collection.concat(nums[i]), used.slice(0));
        used[i] = false; // 重置状态
      }
    }
    collection = null;
    used = null;
  }
  search([], used);
  return result;
};

全组合: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。

var combine = function (n, k) {
  let result = [];
  function find(collection, from) {
    if (collection.length === k) {
      result.push(collection);
      return;
    }
    for (let i = from; i <= n; i++) {
      find(collection.concat(i), i + 1);
    }
  }
  find([], 1);
  return result;
};
Last Updated: 11/27/2021, 6:11:48 PM