假設有從 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。
難點在於效率問題。如果老老實實先求全排列然後再判斷,基本上到11就會超時。
其中乙個最簡單的優化方法就是,再全排列實現交換之後,立即判斷交換的值是否符合
「優美的排列」。
(1)符合,則繼續實現排列。
(2)不符合,則以當前nums[first]為基礎的排列沒有必要再繼續。
#include #include using namespace std;
class solution
permute(nums);
return res.size();
}private:
vector> res;
/* 全排列 */
void permute(vector& nums)
void backtrace(int first,
vector& nums,
vector>& res)
for(int i=first;i& arr)
// }
// return ajudge;
// }
};int main()
LeetCode526 優美的排列
題目 假設有從 1 到 n 的n個整數,如果從這n個數字中成功構造出乙個陣列,使得陣列的第i位 1 i n 滿足如下兩個條件中的乙個,我們就稱這個陣列為乙個優美的排列。條件 第i位的數字能被i整除 i能被第i位上的數字整除 現在給定乙個整數 n,請問可以構造多少個優美的排列?示例1 輸入 2輸出 2...
leetcode 526 優美的排列
假設有從 1 到 n 的n個整數,如果從這n個數字中成功構造出乙個陣列,使得陣列的第i位 1 i n 滿足如下兩個條件中的乙個,我們就稱這個陣列為乙個優美的排列。條件 第i位的數字能被i整除 i能被第i位上的數字整除 現在給定乙個整數 n,請問可以構造多少個優美的排列?輸入 2輸出 2解釋 第 1 ...
Leetcode 526 優美的排列
假設有從 1 到 n 的n個整數,如果從這n個數字中成功構造出乙個陣列,使得陣列的第i位 1 i n 滿足如下兩個條件中的乙個,我們就稱這個陣列為乙個優美的排列。條件 第i位的數字能被i整除 i能被第i位上的數字整除 現在給定乙個整數 n,請問可以構造多少個優美的排列?示例1 輸入 2 輸出 2 解...