Fancy DSA Fancy DSA
数据结构
算法
LeetCode
  • 关于
  • 导航 (opens new window)
  • 分类
  • 标签
  • 归档
设计模式 (opens new window)
博客 (opens new window)
GitHub (opens new window)

Jonsam NG

想的更多,也要想的更远
数据结构
算法
LeetCode
  • 关于
  • 导航 (opens new window)
  • 分类
  • 标签
  • 归档
设计模式 (opens new window)
博客 (opens new window)
GitHub (opens new window)
  • 开始上手
  • Plan 计划
  • Roadmap 路线
  • 算法简介
  • Sort 排序

  • Search 搜索

  • Recursive 递归

  • Graph 图

  • Tree 树

  • Math 数学

  • Hash 哈希

  • String 字符串

    • AlphaNumericPalindrome [回文串]
    • AlternativeStringArrange [交替合并字符串]
    • BoyerMoore [博耶-穆尔字符串搜索算法、BM 算法]
    • CheckAnagram [易位构词]
    • NamingConvention [命名规则]
    • CheckExceeding [Exceeding words]
    • CheckPangram [全字母句]
    • CheckWordOccurrence [单词计数]
    • CountVowels [元音字母计数]
    • CreatePermutations [全排列]
      • 介绍
      • 实现
      • 参考
    • DiceCoefficient [Dice系数]
    • FormatPhoneNumber [格式化电话号码]
    • GenerateGUID [生成GUID、UUID]
    • HammingDistance [汉明距离]
    • KMPPatternSearching [KMP字符串匹配]
  • BitManipulation 位操纵

  • Backtracking 回溯

  • DynamicProgramming 动态规划

  • Cache 缓存

  • Array 数组

  • Ciphers 密码学

  • Conversions 转换

  • ProjectEuler 欧拉计划

  • 其他

  • 算法
  • String 字符串
jonsam
2022-09-26
目录

CreatePermutations [全排列]

# 介绍

排列(英语:Permutation,置换)是将相异物件或符号根据确定的顺序重排。每个顺序都称作一个排列。例如,从一到六的数字有 720 种排列,对应于由这些数字组成的所有不重复亦不阙漏的序列,例如 "4, 5, 6, 1, 2, 3" 与 1, 3, 5, 2, 4, 6。

# 实现

# JavaScript

/*
a permutation of a set is, loosely speaking, an arrangement of its members into a sequence or linear order, or if the set is already ordered, a rearrangement of its elements.
The word "permutation" also refers to the act or process of changing the linear order of an ordered set
More at : https://en.wikipedia.org/wiki/Permutation
*/

const createPermutations = (str) => {
 // convert string to array
 const arr = str.split("");

 // get array length
 const strLen = arr.length;
 // this will hold all the permutations
 const perms = [];
 let rest;
 let picked;
 let restPerms;
 let next;

 // if strLen is zero, return the same string
 if (strLen === 0) {
  return [str];
 }
 // loop to the length to get all permutations
 for (let i = 0; i < strLen; i++) {
  rest = Object.create(arr);
  picked = rest.splice(i, 1);

  restPerms = createPermutations(rest.join(""));

  for (let j = 0, jLen = restPerms.length; j < jLen; j++) {
   next = picked.concat(restPerms[j]);
   perms.push(next.join(""));
  }
 }
 return perms;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
  • Object.create() (opens new window) 方法用于创建一个新对象,使用现有的对象来作为新创建对象的原型(prototype)。参见:Object.create ()、new Object () 和 {} 的区别 - 掘金 (opens new window)。
  • splice() (opens new window) 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。

# 参考

  • Permutation - Wikiwand (opens new window)
编辑 (opens new window)
上次更新: 2022/10/20, 20:03:22
CountVowels [元音字母计数]
DiceCoefficient [Dice系数]

← CountVowels [元音字母计数] DiceCoefficient [Dice系数]→

最近更新
01
0-20题解
10-31
02
本章导读
10-31
03
算法与转换:Part1
10-28
更多文章>
Theme by Vdoing | Copyright © 2022-2022 Fancy DSA | Made by Jonsam by ❤
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式