主页 > 其他  > 

Leetcode526Beautifulnumber

Leetcode526Beautifulnumber
题意

n个数组成排列,排列的下标为i从1开始,并且排列中的每一个数都满足性质,nums[i]能被i整除,或者i被nums[i]整除,求一共有多少个这样的数列

题解

用一个长度为n+1的数组(因为下标从1开始),来记录1-n是否已经选过。用dfs对数列中的每一个位置i搜索如果nums[i]能被i整除,或者i被nums[i]整除。如果最后形成的数列长度为n那么这样的数列就是满足条件的

代码 class Solution { public: int cnt; vector<bool> a; int countArrangement(int n) { a.resize(n+1, false); dfs(n, 0); return cnt; } void dfs(int n, int u) { if(u == n) { cnt++; return; } for(int i = n; i >= 1; i--) { if(!a[i] && (i % (u+1) == 0 || (u+1) % i == 0)) { a[i] = true; dfs(n, u+1); a[i] = false; } } } };

时间复杂度 O ( n ! ) O(n!) O(n!) 空间复杂度 O ( n ) O(n) O(n)

标签:

Leetcode526Beautifulnumber由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Leetcode526Beautifulnumber