27--输出给定字符串的排列【4.12】--待解决

**解法1:思想:**不断地去字符串数组里面拿一个字符,从剩余的字符串选择一个拼接字符串,每拿一个减去一个;当字符串数组被拿空时,就把结果添加进结果数组里,然后回溯上一层,(通过往数组加回去字符以及拼接的字符串减少一个来回溯。)

在这里插入图片描述

算法步骤:
1.遍历字符串数组里面拿一个字符, 把该字符加入到result
arr定义为:ABCD:
取出A; rusult先把A放进去
2.原数组减去当前正在遍历的字符
arr变成了:BCD;
3.对于减去该字符的arr,递归perm方法;如此循环递归,跳出条件为:当index为length时,说明当A为第一个字母时字符串数组被拿空,结果添加进结果数组,遍历结束;
4.原数组加上当前正在遍历的字符
arr又变成了:ABCD;
5.for循环控制来到了遍历B元素:
rusult先把B放进去
后面同上递归
js核心实现代码:

for (let i = 0; i < arr.length; i++) {
  if (!isRepeated.has(arr[i])) {
    // 避免相同的字符交换
    const char = arr.splice(i, 1)[0];
    pStr += char;
    permutate(arr, pStr, res);
    arr.splice(i, 0, char); // 恢复字符串,回溯
    pStr = pStr.slice(0, pStr.length - 1); // 回溯
    isRepeated.add(char);
  }
}```

解法2:递归思想

```cpp
function permutate2(arr, index, res) {
if (arr.length === index) {
   return res.push(arr.join(''));
}
for (let i = index; i < arr.length; i++) {
  [arr[index], arr[i]] = [arr[i], arr[index]]; // 交换
  permutate2(arr, index + 1, res);
  [arr[index], arr[i]] = [arr[i], arr[index]]; // 交换
}```


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值