递归、搜索与回溯-综合练习:22.优美的排列

题目链接:526. 优美的排列(中等)

算法原理:

解法:DFS

Java代码:

java 复制代码
class Solution {
    //526. 优美的排列
    //吴小哲写的跟我这个大差不差
    int ret;
    //int[] path;
    boolean[] check;
    public int countArrangement(int n) {
        ret=0;
        //path=new int[n+1];//是n+1而不是n
        //for(int i=1;i<=n;i++) path[i-1]=i;
        check=new boolean[n+1];//是n+1而不是n
        dfs(n,1);//索引开始为1
        return ret;
    }
    public void dfs(int n,int pos){
        if(pos>n){ret++;return;}
        for(int i=1;i<=n;i++){
            if(!check[i]&&(i%pos==0||pos%i==0)){
                //我们要保证每个数字只使用一次,而不是每个位置只使用一次
                check[i]=true;//所以用i,check[i]=true表示i已经被使用了
                //path[pos]=i;
                dfs(n,pos+1);
                check[i]=false;//恢复现场
            }
        }
        // if(!check[pos]){
        //     for(int i=1;i<=n;i++){
        //         if(i%path[pos]==0||path[pos]%i==0){
        //             check[pos]=true;
        //             dfs(n,pos+1);
        //             check[pos]=false;
        //         }
        //         check[pos]=true;
        //     }
        // }
    }
}
相关推荐
纽扣6671 分钟前
【算法进阶之路】链表进阶:删除、合并、回文与排序全解析
数据结构·算法·链表
9523615 分钟前
SpringBoot统一功能处理
java·spring boot·后端
Lyyaoo.18 分钟前
优惠券秒杀业务分析
java·开发语言
消失的旧时光-194319 分钟前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法
勿忘初心122122 分钟前
Java 国密 SM4 加密工具类实战(Hutool + BouncyCastle)|企业级数据加密 + 兼容 JDK8
java·数据安全·数据加密·后端开发·企业级开发·国密 sm4
庞轩px26 分钟前
第8篇:原子类与CAS底层原理——无锁并发的实现
java·cas·乐观锁·aba·无锁编程·自旋
智者知已应修善业30 分钟前
【51单片机不用数组动态数码管显示字符和LED流水灯】2023-10-3
c++·经验分享·笔记·算法·51单片机
rleS IONS36 分钟前
SpringBoot中自定义Starter
java·spring boot·后端
苍煜1 小时前
慢SQL优化实战教学
java·数据库·sql
AI进化营-智能译站1 小时前
ROS2 C++开发系列16-智能指针管理传感器句柄|告别ROS2节点内存泄漏与野指针
java·c++·算法·ai