JavaScript 中的排列

 

 

在 JavaScript 中,有slicereducefiltersubstring和更多方法来解决排列给定字符串或数组的所有可能试验的基本问题。

在这里,我们将展示如何从给定的输入中提取数组和字符串的组合。主要重点是将每个文字从数组或字符串中分离出来,并一个一个地交换其他文字。

在以下部分中,我们将通过必要的代码示例详细讨论该过程。

目录

1.给定数组的排列

2.给定字符串的排列 


1.给定数组的排列

我们将permute用其中的另一个函数初始化一个函数backtrackbacktrack将递归调用此函数以执行正确的组合集。

代码片段:

var permute = function(nums){
    var result = [];
    var backtrack = (i, nums) => {
      if(i===nums.length){
        result.push(nums.slice());
        return;
      }  
      for(let j = i; j < nums.length; j++){
        [nums[i],nums[j]] = [nums[j],nums[i]];
        backtrack(i+1, nums);
        [nums[i],nums[j]] = [nums[j],nums[i]];
      }
    }
    backtrack(0, nums);
    console.log(result);
    return result;
  };
  permute([1,2,3]);

输出: 

 

这里的主要动作定义了交换部分,我们将每个文字与一个试验(例如 [1,2,3])的另一个交换,并得出可能的组合。

从试验中[1,2,3],我们会得到[1,2,3] & [1,3,2]。这部分将被执行,直到每个文字都得到检查。

在切换到下一个试验之前,我们1,2,3通过再次交换(因为最后一个组合是)返回到基础试验( [1,3,2])。这就是回溯的操作方式。

形成一棵树以查看可能的试验,树的长度等于数组长度。最初,我们执行 aDFS来解决这个问题,然后递归回溯过程来完成它

2.给定字符串的排列 

在字符串的情况下,我们split首先将字符串,然后我们将使用该方法通过递归调用函数reduce来逐个连接可能的试验。permutationString

代码片段:

var permutationString = str => {
    if (str.length <= 2) return str.length === 2 ? [str[0] + str[1], str[1] + str[0]] : [str];
    return str
       .split('')
       .reduce(
          (accumulator, letter, i) =>
           accumulator.concat(permutationString(str.slice(0, i) + str.slice(i+1)).map(val => letter + val)),[]);
 };
 console.log(permutationString('abcd'));

输出: 

根据累加器函数,我们保留了每个组合。

我们使用该slice方法锁定某个字母并根据之前初始化的基本情况添加其余字母。最后,输出结果为所有预期模式的组合形式。

阶乘公式推导出方法排列,因此该问题的解决方案通常runtime error适用于大型情况。但是,可以通过这种方式对具有适当可视化的问题进行基本推理。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值