本文主要是介绍移动笔试合集 6、优美的排列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
526. 优美的排列
假设有从 1 到 n 的 n 个整数。用这些整数构造一个数组 perm
(下标从 1 开始),只要满足下述条件 之一 ,该数组就是一个 优美的排列 :
perm[i]
能够被i
整除i
能够被perm[i]
整除
给你一个整数 n
,返回可以构造的 优美排列 的 数量 。
示例 1:
输入:n = 2 输出:2 解释: 第 1 个优美的排列是 [1,2]:- perm[1] = 1 能被 i = 1 整除- perm[2] = 2 能被 i = 2 整除 第 2 个优美的排列是 [2,1]:- perm[1] = 2 能被 i = 1 整除- i = 2 能被 perm[2] = 1 整除
示例 2:
输入:n = 1 输出:1
提示:
1 <= n <= 15
class Solution {int N = 17,count = 0;List<Integer>[] arr = new List[N];boolean[] vis = new boolean[N];public int countArrangement(int n) {for (int i = 0; i <= n; i++) {arr[i] = new ArrayList<Integer>();}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (i%j==0||j%i==0) {//找到每个位置可以填的数arr[i].add(j);}}}dfs(1, n);return count;}public void dfs(int id,int n){if (id == n+1) {//当达到数组长度时count++;return;}for (int i : arr[id]) {if (!vis[i]) {vis[i] = true;dfs(id+1,n);vis[i] = false;}}}
}
这篇关于移动笔试合集 6、优美的排列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!