递归、搜索与回溯-综合练习: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;
        //     }
        // }
    }
}
相关推荐
伯恩bourne3 分钟前
Google Guava:Java 核心工具库的卓越之选
java·开发语言·guava
2401_879503419 分钟前
C++中的观察者模式变体
开发语言·c++·算法
小王不爱笑13216 分钟前
Spring 基础核心
java
心勤则明26 分钟前
用 Spring AI Alibaba 打造智能查询增强引擎
java·人工智能·spring
Arva .27 分钟前
Spring 的三级缓存,两级够吗
java·spring·缓存
阿贵---29 分钟前
C++中的备忘录模式
开发语言·c++·算法
setmoon2141 小时前
C++中的观察者模式实战
开发语言·c++·算法
山峰哥1 小时前
查询优化案例:从慢查询到闪电般的查询速度
数据库·sql·性能优化·编辑器·深度优先
2403_835568471 小时前
C++代码规范化工具
开发语言·c++·算法
爱喝一杯白开水1 小时前
Java 定时任务完全指南
java