[LeetCode]526. Beautiful Arrangement

来源:互联网 发布:matlab周期方波编程 编辑:程序博客网 时间:2024/06/06 12:44

[LeetCode]526. Beautiful Arrangement

题目描述

这里写图片描述

思路

递归
对于长度为n的数组,初始化为1,2,3,…,n的形式的数组
扫描数组,当前值满足条件时,与末位交换
然后判断n-1长度的数组的完美个数
直到n=1时,完美数组是1个,递归终止条件。

遵循的规律,每次发生交换后,数组必然为完美数组,原因?

代码

#include <iostream>#include <vector>#include <algorithm>using namespace std;class Solution {public:    int countArrangement(int N) {        vector<int> nums;        for (int i = 1; i <= N; ++i)            nums.push_back(i);        return counts(N, nums);    }    int counts(int len, vector<int> &nums) {        if (len == 0) return 1;             int res = 0;        for (int i = 0; i < len; ++i) {            if (nums[i] % len == 0 || len % nums[i] == 0) {                swap(nums[i], nums[len - 1]);                res += counts(len - 1, nums);                swap(nums[i], nums[len - 1]);            }        }        return res;    }};int main() {    Solution s;    cout << s.countArrangement(3) << endl;    system("pause");    return 0;}
原创粉丝点击