LeetCode46 全排列 遞迴

2022-05-13 08:03:33 字數 928 閱讀 2464

遞迴的使用,是真的燒腦子,只能多練。

整個思路就是,對每個數,進行匹配。

每次把1個數加到自己後面,再和剩下的全排列

這道題!是沒有重複數字的!這非常好做!

舉個例子

1,2,3,4吧

【1、2】  【1、3】  【1、4】

【1、2、3】  【1、2、4】  【1、3、2】  【1、3、4】  【1、4、3】  【1、4、2】

【1、2、3、4】  【1、2、4、3】  【1、3、2、4】  【1、3、4、2】  【1、4、3、2】  【1、4、2、3】

但對於2也是這樣

總的來說,就是拿上一次的結果,加上自己後,進行遞迴。

遞迴就是迴圈選擇陣列裡面還沒在list裡面的元素,加在後面。

這個**很難寫,多品一品

有個小技巧,不一定非得拿返回值,把結果存在引數裡也行。這樣直觀一點,像全域性變數一樣,拿返回值很複雜

public

class

leetcode46 ;

list

> res =permute(a);

for(int i=0;i)

system.out.println();}}

public

static list> permute(int

nums)

return

res;

}//其實是每次對list和剩下的元素進行全排列

//list是上一次的結果

public

static

void digui(int nums,listlist,list>res)

for(int i=0;i)

temp.add(nums[i]);

digui(nums,temp,res);}}

//迴圈跑完了就退出了

}}

遞迴 LeetCode46 全排列

回溯法的求解過程實質上是乙個先序遍歷一棵狀態樹的過程,只是這棵樹不是遍歷前預先建立的,而是隱含在遍歷的過程中。遞迴題的解法 首先把題目的決策樹畫出來,樹的層就是for迴圈,樹的深度就是要遞迴的引數i。畫出決策樹後,找規律,進行剪枝。e.g.輸入 1,2,3 放小球問題,有三個盒子,將每個數放入某個盒...

遞迴的使用 LeetCode46 全排列

題目 給定乙個沒有重複數字的序列,返回其所有可能的全排列。示例 輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 解答1 class solution public static void digui int a,listl,list ll else 處...

leetcode 46 全排列(回溯)

給定乙個沒有重複數字的序列,返回其所有可能的全排列。示例 輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 核心的遞迴部分如下 for begin in range 0 n for i in range begin,n swap nums begin n...