給定乙個 沒有重複 數字的序列,返回其所有可能的全排列。全排列問題都可以用dfs(深度優先遍歷)解決,不過這個題是帶權型別的(自稱)。所以需要標記位。大致畫了個圖如下:示例:輸入: [1,2,3]
輸出:[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
/*** @param nums 傳入陣列
* @param stage 位置狀態
* @param index 當前搜尋的深度
*/public void dfs(int nums, boolean stage,int index)
for (int i = 0; i < nums.length; i++) }}
程式執行流程我也大致畫了下(畫的不嚴謹):
首先遇到全排列問題,腦海中要立馬蹦出dfs,然後根據題目要求確定是否需要帶權。
其次dfs的遞迴模板比較簡單,可以死記住。
leetcode 第46題和第47題 全排列問題
leetcode 第46題和第47題 都是求乙個給定陣列中的全排列問題,不同之處在於47題中陣列的元素可以重複。這也是乙個遞迴問題。對於陣列中的每個元素,它的全排列就等於它本身加上除它以外所有的全排。所以只要這樣依次計算全排列就行。class solution private void permut...
全排列(力扣第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解決,只不過需要注意的是,我們一般...