leetcode習題集 47 全排列 II

2021-09-18 07:04:36 字數 1190 閱讀 4141

給定乙個可包含重複數字的序列,返回所有不重複的全排列。

示例:

輸入: [1,1,2]

輸出:[

[1,1,2],

[1,2,1],

[2,1,1]

]

public

class

p47_permutationsii2

list

list =

newarraylist

<

>()

;for

(int i =

0;i)recursion

(list,

newarraylist

<

>()

);return rlist;

}private

void

recursion

(list

list,list

result)

else}}

}}

思路:見46. 全排列的解法1

這裡的乙個改動是,用乙個map儲存了該位置上已經遍歷過的數字,防止出現重複。

public

class

p47_permutationsii3

public

void

dfs(list

> res,

int[

] nums,

int cur)

else}}

private

void

swap

(int

nums,

int i,

int j)

}

思路:深度優先解法

對陣列進行排序,保證向後深度步進時不會出現因為替換順序的不同而造成的重複,如:

1.1 2211->2121(2,3交換)->2112(3,4交換)

1.2 2211->2112(2,4交換)->2112(3,4交換)

進行深度優先遍歷

2.1 同一層深度中,對從cur到nums結尾的每個數遍歷

2.2 判斷不同下標的nums[i]值是否相等,如果相等則跳過(去重)

2.3 交換當前cur和遍歷到此處的i

2.4 向下深度遞迴

2.5當cur到末尾時輸出結果

leetcode習題集 143 重排鍊錶

給定乙個單鏈表 l l0 l1 ln 1 ln 將其重新排列後變為 l0 ln l1 ln 1 l2 ln 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 1 給定鍊錶 1 2 3 4,重新排列為 1 4 2 3.示例 2 給定鍊錶 1 2 3 4 5,重新排列為 1 5 2...

Leetcode習題集 鍊錶

這裡記錄一些我刷題的思路方便之後進行複習重溫,同時也方便進行新增 p141 環形鍊錶 class solution listnode reverse listnode head return pre 使用翻轉鍊錶,判斷返回的指標與傳進的指標是否相同,時間複雜度是o n 可能 空間複雜度是o 1 cl...

leetcode習題集 54 螺旋矩陣

給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。示例 1 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12,11...