字符串全排列(精讲)
【摘要】 解决字符串全排列问题,需要学习递归算法,递归方法有点像高中数学中的数学归纳法。学习递归应当知道递归的三要素:1、明确递归终止条件;递归就是有去有回,所以一定有一个明确的临界点,程序一旦到达了这个临界点,就不会继续往下递下去而是开始实实在在的归来。2、给出递归终止时的处理办法;在递归的临界点会存在一个情景,在这个情景下我们可以给出一个解决问题的方法,运用这个方法可以让我们的问题解决起来更加的容...
解决字符串全排列问题,需要学习递归算法,递归方法有点像高中数学中的数学归纳法。
学习递归应当知道递归的三要素:
1、明确递归终止条件;
递归就是有去有回,所以一定有一个明确的临界点,程序一旦到达了这个临界点,就不会继续往下递下去而是开始实实在在的归来。
2、给出递归终止时的处理办法;
在递归的临界点会存在一个情景,在这个情景下我们可以给出一个解决问题的方法,运用这个方法可以让我们的问题解决起来更加的容易,简单,明确。
3、提取重复的逻辑,缩小问题规模。
递归问题一定是可以分解成n个小问题,同时这些个小问题是与原问题形式相同,这些小问题可以用同样的思路解决。
在日常的工作学习中,递归算法一般用于结果三类问题:
(1). 问题的定义是按递归定义的。 例如:阶乘
(2). 问题的解法是递归的(这类问题属于只能用递归算法才可以解决,例如:汉罗塔问题)
(3).数据的结构是呈递归形式的
典型例题:字符串全排列问题
从字符串数组中每次选取一个元素,作为结果中的第一个元素;然后,对剩余的元素全排列
首先定义一个字符串(可以修改),再定义一个名为f的方法,首先,递归方法的三要素第一条就是确定递归的终止条件。第二条便是给出递归算法终止时的处理方法
所以要进行边界条件的检查,之后确定终止条件,显示输出结果。定义一个新的方法用于进行全排列。要变换前缀,结果中的排位在第一个的元素,之后对其他元素进行全排列。进行递归调用,缩小问题的规模,在最后复原前缀,复原字符数组。
结果如下:
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)