字符串全排列(精讲)

举报
裴士 发表于 2022/02/20 11:56:03 2022/02/20
【摘要】 解决字符串全排列问题,需要学习递归算法,递归方法有点像高中数学中的数学归纳法。学习递归应当知道递归的三要素:1、明确递归终止条件;递归就是有去有回,所以一定有一个明确的临界点,程序一旦到达了这个临界点,就不会继续往下递下去而是开始实实在在的归来。2、给出递归终止时的处理办法;在递归的临界点会存在一个情景,在这个情景下我们可以给出一个解决问题的方法,运用这个方法可以让我们的问题解决起来更加的容...

解决字符串全排列问题,需要学习递归算法,递归方法有点像高中数学中的数学归纳法。

学习递归应当知道递归的三要素:

1、明确递归终止条件;

递归就是有去有回,所以一定有一个明确的临界点,程序一旦到达了这个临界点,就不会继续往下递下去而是开始实实在在的归来。

2、给出递归终止时的处理办法;

在递归的临界点会存在一个情景,在这个情景下我们可以给出一个解决问题的方法,运用这个方法可以让我们的问题解决起来更加的容易,简单,明确。

3、提取重复的逻辑,缩小问题规模。

递归问题一定是可以分解成n个小问题,同时这些个小问题是与原问题形式相同,这些小问题可以用同样的思路解决。

在日常的工作学习中,递归算法一般用于结果三类问题:

(1). 问题的定义是按递归定义的。 例如:阶乘

(2). 问题的解法是递归的(这类问题属于只能用递归算法才可以解决,例如:汉罗塔问题)

(3).数据的结构是呈递归形式的

典型例题:字符串全排列问题

从字符串数组中每次选取一个元素,作为结果中的第一个元素;然后,对剩余的元素全排列

图片5.PNG

首先定义一个字符串(可以修改),再定义一个名为f的方法,首先,递归方法的三要素第一条就是确定递归的终止条件。第二条便是给出递归算法终止时的处理方法

所以要进行边界条件的检查,之后确定终止条件,显示输出结果。定义一个新的方法用于进行全排列。要变换前缀,结果中的排位在第一个的元素,之后对其他元素进行全排列。进行递归调用,缩小问题的规模,在最后复原前缀,复原字符数组。

结果如下:

图片4.PNG

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。