优雅的全排列

本文介绍了一种使用递归实现的全排列算法,并通过一个具体的Java程序示例进行说明。该算法能够有效地处理字符数组的全排列问题,适用于解决如1到20整数的全排列等更复杂场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.iteye.com/topic/770382提到:

 

4.1~20的整数的全排列,因为不才以前也研究过排列组合的问题,于是有了本专题。

 

最近的专题更多的是在给条鱼人家吃,没有讲怎么捕鱼。所以今天在介绍优雅代码之前,提出一个解决问题的方法论。

 

复杂问题都是由简单问题组成的,先解决简单问题。

 

言简意赅,任何复杂问题都是纸老虎。当你面对99*99时,你就要考虑将他变成1+1,然后解决1+1

 

有了这个方法论,面对1-20的全排列。你知道怎么做了吧。没错,转变成AB的全排列。

 

AB:  AB  BA

 

太简单了,加个“C”吧。

 

ABC:  ABC ACB BAC BCA CAB CBA

 

看见标红色的字母了吧,无视它的存在, 就变成了 AB BCAC  全排列。

 

大问题可沿用小问题的解法,让你想到了什么。一个是递归,一个是动态规划。这里显然适合用递归。

假设有n个字符,基本的算法就是:

1.n>2时,变成n-1问题

2.n=2时,输出

3.滚动数组

 

于是,一个优雅的方案浮出水面:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值