全排列

简介: 全排列,

全排列

  1. 字符串参数中的字符无重复且仅包含小写字母
  2. 返回的排列组合数组不区分顺序
const _permute = string => {
   
  if (string.length === 1) {
   
    return [string];
  }
  const res = [];
  for (let s of string) {
   
    const arr = string.split('').filter(str => str !== s);
    _permute(arr.join('')).forEach(item => {
   
      res.push(s + item);
    });
  }
  return res;
};
const input = 'abc';
const result = _permute(input);
console.log(result);

这段代码是一个递归函数 _permute,用于生成字符串参数的所有排列组合。它使用了回溯法的思想。

首先,如果字符串的长度为 1,表示已经无法再进行排列,直接返回包含该字符串的数组 [string]。

否则,创建一个空数组 res,然后对字符串中的每个字符 s 进行遍历。在每次遍历中,生成一个新的数组 arr,其中排除当前字符
s。接着,递归调用 _permute 函数,传入 arr.join('') 作为新的字符串参数,获取其排列组合结果。

对于递归返回的每个排列组合 item,将当前字符 s 与 item 拼接,并将结果添加到 res 数组中。

最后,函数返回所有排列组合的结果数组 res。

目录
相关文章
|
6月前
|
C++
【洛谷 P1706】全排列问题 题解(全排列)
该问题要求按字典序输出从1到n的所有不重复排列。输入为整数n,输出为每行一个的数字序列,每个数字占5个宽度。样例输入3,输出6行全排列。代码使用C++,通过`next_permutation`函数生成所有排列。注意n的范围是1到9。
53 0
|
7月前
|
存储
全排列问题
全排列问题
25 0
1199:全排列
1199:全排列
202 0
|
机器学习/深度学习 存储 算法
算法训练Day29|* 491.递增子序列* 46.全排列* 47.全排列 II
算法训练Day29|* 491.递增子序列* 46.全排列* 47.全排列 II
Day29——491.递增子序列、 46.全排列、47.全排列 II
Day29——491.递增子序列、 46.全排列、47.全排列 II
94 0
PAT乙级 (二分) 1030.完美数列
PAT乙级 (二分) 1030.完美数列
98 0
【LeetCode】第4天 - 977. 有序数组的平方 | 189. 旋转数组
【LeetCode】第4天 - 977. 有序数组的平方 | 189. 旋转数组
101 0
【LeetCode】第4天 - 977. 有序数组的平方 | 189. 旋转数组
20天刷题计划-46. 全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例 2: 输入:nums = [0,1] 输出:[[0,1],[1,0]] 示例 3: 输入:nums = [1] 输出:[[1]]