蓝桥杯 算法提高 判断名次 java

Adv141 算法提高 判断名次

题目如下:
image-20200819203525604

这道题的主要的点不在于怎么判断出排名这个过程,判断排名其实就是模拟一下,并不难。主要是全排列问题,什么叫全排列呢,就是类似给你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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值