優美的排列 加深對回溯演算法層數的理解

2021-10-05 20:42:45 字數 1032 閱讀 3836

leetcode:優美的排列

假設有從 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。
一開始對回溯演算法層數和陣列對應的第i位沒理解透徹,導致解題過程中浪費了一些時間,後來在回溯演算法中引入乙個值用來記錄當前是第幾層,就能很好的與陣列的第i位對應起來啦。做了這題之後加深了對回溯演算法層數的理解,下面是**:

# include

# include

using

namespace std;

class

solution

void

trackback

(vector<

int>

&resultset,vector<

bool

>

&select,

int n,

int&count,

int k)

for(

int i=

1;i<=n;i++)}

};

因為題目中說的是i和第i個元素,所以是記錄層數的元素k和陣列中第k位元素相比較,搞清楚之後就不會出錯了。

演算法實踐 leetcode526 優美的排列

假設有從 1 到 n 的n個整數,如果從這n個數字中成功構造出乙個陣列,使得陣列的第i位 1 i n 滿足如下兩個條件中的乙個,我們就稱這個陣列為乙個優美的排列。條件 第i位的數字能被i整除 i能被第i位上的數字整除 現在給定乙個整數 n,請問可以構造多少個優美的排列?示例 輸入 2 輸出 2 解釋...

Leetcode 全排列 和 回溯演算法的筆記

link 輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 此題使用的樹形回溯演算法 backtracking就是在深度優先dfs的基礎上加上狀態恢復,來保證在當前層的狀態不變,進而保證在本層loop時對其他路徑沒有影響。class solution s...

全排列的演算法(六) 回溯法

全排列的生成演算法 六 回溯法 回溯法通常是構造一顆生成樹。以3 個元素為例 樹的節點資料可取值是1 2 3。如果某個節點為 0,則表示尚未取值。初始狀態是 0,0 0 第1 個元素值可以分別挑選1,2,3,因此擴充套件出 3個子結點。用相同方法找出這些結點的第 2個元素的可能值,如此反覆進行,一旦...