Adv141 算法提高 判断名次
题目如下:
这道题的主要的点不在于怎么判断出排名这个过程,判断排名其实就是模拟一下,并不难。主要是全排列问题,什么叫全排列呢,就是类似给你A,B,C,D,E这个5个字母,你把这5个字母所有可能的排列方式都求出来。ABCDE,ABCED,ABDCE…一共120种。
有些人会用5层循环来排列出来,但讲道理如果给你的字母几十个你怎么办?我这里采用了常见的dfs去递归回溯来解决。
对于dfs不是很清楚的建议先学习一波,讲道理蓝桥最喜欢考dfs了,每届都考
package adv;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @Description: 算法提高 判断名次
* @ClassName: Adv141
* @author: fan.yang
* @date: 2020/08/19 17:30
*/
public class Adv141 {
//存放各种排列组合里的字母的 最后会转成String的
public static char[] chars = new char[5];
//用这个来判断某个字母有没有被访问了
public static int[] visit = new int[5];
//上述的转成String就存在这里
public static List<String> strings = new ArrayList<>();
//全排列函数
public static void permutation(int k) {
//一共5个 到达5就需要存储以及结束
if(k == 5){
strings