力扣46 全排列

2021-10-09 09:31:35 字數 868 閱讀 1054

給定乙個 沒有重複 數字的序列,返回其所有可能的全排列。

這道題其實就是看你如何遍歷這棵搜尋樹。

輸入1,2,3情況下的求解樹,如下:

如果用dfs來做:

第一種思路,交換(可能比較難想到)

說白了每次挑乙個數字出來,為了保證不重複,我就換就行了嘛。

void

perm

(int list,

int k,

int m)

cout << endl;

}else

}}

第二種思路,設定標誌(像轉密碼鎖一樣,但是我要每位保證數字都不同)

每次迴圈挑乙個數,挑中我就置為true,挑不中我就接著遍歷。

void

perm2

(bool used[

],vector<

int>

&res, vector<

int>

&list)

cout << endl;

return;}

else}}

}

總結:像這種問題步驟,第一步我怎麼列舉這些數(怎麼遍歷這棵樹,for迴圈),第二步終止條件是啥,第三步,怎麼選點,第四步,怎麼回溯。下面給個dfs模板,有了以上想法,直接修修改改就行了。

void

dfs(

int x,

int y)

else

}}

力扣 46 全排列

傳送門 給定乙個沒有重複數字的數列,輸入該數列的全排列。這是一道回溯法 遞迴思想 的題目,可以通過遞迴來列舉所有的排列組合,為了避免重複使用某個數字,可以用flag標記每個數字是否使用。方面,回溯法的框架如下,細品 result def backtrack 路徑,選擇列表 if滿足結束條件 resu...

全排列(力扣第46題)

題目 給定乙個 沒有重複數字的序列,返回其所有可能的全排列。示例 輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 分析 求給定一組數的全排列,也就是排列組合問題,所以屬於backtracking 回溯 問題,通過dfs解決,只不過需要注意的是,我們一般...

全排列(力扣第46題)

題目 給定乙個 沒有重複數字的序列,返回其所有可能的全排列。示例 輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 分析 求給定一組數的全排列,也就是排列組合問題,所以屬於backtracking 回溯 問題,通過dfs解決,只不過需要注意的是,我們一般...