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

博客主要介绍了蓝桥杯中关于算法提高的一道题目——判断名次。重点不是排名的逻辑,而是如何实现全排列,即对一组元素进行所有可能的排列。作者提到,虽然可以使用多层循环解决,但面对大量元素时,更推荐使用深度优先搜索(DFS)策略。文章建议对DFS不熟悉的读者先进行学习,因为DFS在蓝桥杯比赛中经常出现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.add
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值