题解 | #全排列#

全排列

https://www.nowcoder.com/practice/b3ac35e1569e4601b6d3957dd337e70b

const _permute = string => {
  // 补全代码
  let result = []
  if(string.length==1){
	return [string]
  }
  for(let x of string){
	let others = string.split('').filter(item=>item!==x)  
	let stringLefted = others.join('')
	let stringLeftedArr = _permute(stringLefted)
	stringLeftedArr.map(item=>{
	  result.push(x+item)
	})
  }
  return result
}

全排列,可以看作取出一个数,剩余的数继续排列,当字符串中每个字符都尝试过取出来,即完成了排列。因此我们需要用到递归,因为他是层层嵌套的,比如三个字符,我取出一个a,剩余bc需要继续排列,而_permute函数本身就是排列字符串的,因此我们需要执行以下_permute('bc')得到排列结果,_permute('bc')当我们取b的时候,就执行以下_permute('c'),到这里我们就没办法执行下去了,因为_permute('')是没有意义的,会陷入死循环,因此当_permute('c')的时候我们要跳出循环,整个流程如下:

  • abc取a,求_permute('bc')
    • bc取b,求_permute('c')
        • _permute('c')返回 [c]
        • bc取c,求_permute('b')
                • _permute('c')返回 [b]
                  • 求_permute('bc') 返回【bc,cb】
                  • 拼接a和【bc,cb】,保存到result中
                  • abc取b,求_permute('bc')
                    • 。。。。
全部评论

相关推荐

认真搞学习:这个真喷不了,你是我见过最美的牛客女孩
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务