🌸递归训练
Traffic_Route
1、某城市经常在高峰时段发生交通拥堵,因此市政府决定采取管制措施:在高峰时段,车辆只能向东或北行驶。所有的街道都是东西走向或者南北走向,形成下图所示网络。
假设我们我们已经知道了一辆车的初始位置和目标位置,那么有多少种可以到达目标位置的路径呢?起点位置为E 终点位置为F (选做利用递归解决)
🍁分析
普通的跳格子问题,直接递归,没啥好说的
1 | public class Traffic_Route { |
🌸Building_Blocks
2、小明最近喜欢搭数字积木。一共有10块积木,每个积木上有一个数字,0~9。
搭积木规则:
每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小。
最后搭成4层的金字塔形,必须用完所有的积木。
下面是两种合格的搭法:
1 | 0 |
请你计算这样的搭法一共有多少种?
🍁分析
- 1.用递归求出0-9的全排列
- 2.对每个排列进行判断,满足条件+1
1 | public class Building_Blocks { |
🌸Mission_Mix
3、X星球要派出一个5人组成的观察团前往W星。
其中:
A国最多可以派出4人。
B国最多可以派出2人。
C国最多可以派出2人。
D国最多可以派出1人。
E国最多可以派出1人。
F国最多可以派出3人。
那么最终派往W星的观察团会有多少种国别的不同组合呢?
🍁分析
数组a是用来存储各个国家可以派遣的人数, 方法 func(int[] a, int k, int n, String s)
其中int[] a
指代数组a,变量k 指代国家索引,变量n 指代当前已经选出的人数,变量str 指代 一个选出的用字符串表示的情况for循环,循环当前国家(a[k])的情况,并用s2存下来,然后k+1递归进入下一个国家(索引值),n-i 表示还需要派遣的人数,s表示存储的当前情况。
1 | public class Mission_Mix { |
🌸Poker_Suquence
4、A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。
请填写出所有符合要求的排列中,字典序最小的那个。
例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。
🍁分析
这道题就这么看,确实懵了一阵,索性直接全排列,寻找满足条件的组合
1 | public class Poker_Suquence { |
🍁全排列第二种写法
1 | public class Poker_Suquence { |
🍁全排列第三种写法
将A当做1
1 | public class Poker_Suquence { |
🌸Full_Of_Permutation
5、已知不同字母构成的串,求它的全排列
例如“ABCD”的全排列?
🍁分析
直接进行全排列,也没什么好说的,分为字符串和字符数组的全排列
1 | public class Full_Of_Permutation { |
1 | public class Full_Of_Permutation { |
🌸Repeated_Letter_Combinations
6、有重复的字母中求取出m个所有组合
例如: “AAABBCCCCCCDD” 中取3个字母的所有组合
🍁分析
无疑是从中拿出三个字母进行全排列,详情见代码
1 | public class Repeated_Letter_Combinations { |