今天给大家分享一道简单的算法题 – 求字符串的全排列
相信很多人都会被这道题考查过,也有很多人不能写出来,放轻松,接下来我们来看下如何实现这道题。
首先我们来看下问题是什么。
给定一个字符串,求出这个字符串所有可能出现的排列组合。
如: abc
输出:
[ ‘cba’, ‘bca’, ‘cab’, ‘acb’, ‘bac’, ‘abc’ ]
准备好了吗? 来一起看下如何实现吧。
解答思路:
首先我们来做个假设:
- 当前给的字符串为
'a'
。那么返回的只有一个排列[ 'a' ]
。 - 当前给的字符串为
'ab'
。则返回[ 'ab', 'ba' ]
。 - 当前给的字符串为
'abc'
。则返回[ 'cba', 'bca', 'cab', 'acb', 'bac', 'abc' ]
。 - ………………
1. 一个字符的情况
乍一看好像没什么规律,不急,我们先来实现以下只有一个字符的情况
栗子:🌰
const str = 'a'
function fullPer (str) {
return [str]
}
fullPer(str) // [ 'a' ]
相信这个代码大家都会写。接下来,难度继续深入。
2. 两个字符的情况
第二步,我们需要添加两个字符的情况。两个的情况下,为了便于我们理解,我们使用递归的方式实现。
使用递归我们需要先找到以下几个条件
- 何时结束:
str
的长度为1
的时候 - 如何递进:每次留一个字符,然后与剩下的字符相加
- 返回结果:返回一个数组
栗子:🌰
const str