求字符串的全排列

今天给大家分享一道简单的算法题 – 求字符串的全排列

相信很多人都会被这道题考查过,也有很多人不能写出来,放轻松,接下来我们来看下如何实现这道题。

首先我们来看下问题是什么。

给定一个字符串,求出这个字符串所有可能出现的排列组合。

如: abc

输出:

[ ‘cba’, ‘bca’, ‘cab’, ‘acb’, ‘bac’, ‘abc’ ]


准备好了吗? 来一起看下如何实现吧。

解答思路:

首先我们来做个假设:

  1. 当前给的字符串为 'a' 。那么返回的只有一个排列 [ 'a' ]
  2. 当前给的字符串为 'ab' 。则返回 [ 'ab', 'ba' ]
  3. 当前给的字符串为 'abc' 。则返回 [ 'cba', 'bca', 'cab', 'acb', 'bac', 'abc' ]
  4. ………………

1. 一个字符的情况

乍一看好像没什么规律,不急,我们先来实现以下只有一个字符的情况

栗子:🌰

const str = 'a'

function fullPer (str) {
   
  return [str]
}

fullPer(str) // [ 'a' ]

相信这个代码大家都会写。接下来,难度继续深入。

2. 两个字符的情况

第二步,我们需要添加两个字符的情况。两个的情况下,为了便于我们理解,我们使用递归的方式实现。

使用递归我们需要先找到以下几个条件

  • 何时结束:str 的长度为 1 的时候
  • 如何递进:每次留一个字符,然后与剩下的字符相加
  • 返回结果:返回一个数组

栗子:🌰

const str 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值