• 526. 优美的排列


    假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数组为一个优美的排列。条件:

    第 i 位的数字能被 i 整除
    i 能被第 i 位上的数字整除
    现在给定一个整数 N,请问可以构造多少个优美的排列?

    示例1:

    输入: 2
    输出: 2
    解释:

    第 1 个优美的排列是 [1, 2]:
    第 1 个位置(i=1)上的数字是1,1能被 i(i=1)整除
    第 2 个位置(i=2)上的数字是2,2能被 i(i=2)整除

    第 2 个优美的排列是 [2, 1]:
    第 1 个位置(i=1)上的数字是2,2能被 i(i=1)整除
    第 2 个位置(i=2)上的数字是1,i(i=2)能被 1 整除
    说明:

    N 是一个正整数,并且不会超过15。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/beautiful-arrangement
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

     1 public class Solution {
     2     private boolean[] flag = null;
     3     /*
     4         坑1:
     5             数字不重复
     6         坑2:
     7             两条件,满足其一即可
     8         坑3:
     9             序列必须由1-N个数字组成,且不重复
    10         思路:
    11             flag记录某个数字用没用
    12             cur记录已使用的个数
    13      */
    14     private int helper(int N, int cur){
    15         if (cur == N+1)
    16             return 1;
    17         int cnt = 0;
    18         for (int i = 1; i <= N; i++) {
    19             if (!flag[i] && (cur % i == 0 || i % cur == 0)){
    20                 flag[i] = true;
    21                 cnt += helper(N, cur+1);
    22                 flag[i] = false;
    23             }
    24         }
    25         return cnt;
    26     }
    27 
    28     public int countArrangement(int N) {
    29         flag = new boolean[N+1];
    30         return helper(N, 1);
    31     }
    32 
    33     public static void main(String[] args) {
    34         int i = new Solution().countArrangement(2);
    35         System.out.println("i = " + i);
    36     }
    37 }
  • 相关阅读:
    maven上传jar包规范
    java.util.ConcurrentModificationException
    求集合中的最大值和最小值
    对象/集合转换成json
    字符串直接赋值和构造赋值的区别
    CSV文件读取
    读取properties配置文件
    图片轮播 js代码
    工作流数据库字段设计-审批流程。。
    @Html.Partials 加载分布视图传参数
  • 原文地址:https://www.cnblogs.com/yfs123456/p/11619724.html
Copyright © 2020-2023  润新知