@@ -10,29 +10,26 @@ class PermutationsII {
10
10
func permuteUnique( _ nums: [ Int ] ) -> [ [ Int ] ] {
11
11
var res = [ [ Int] ] ( ) , path = [ Int] ( ) , visited = [ Bool] ( repeating: false , count: nums. count)
12
12
13
- let nums = nums. sorted ( by: < )
14
-
15
- _dfs ( & res, & path, nums, & visited)
13
+ dfs ( & res, & path, & visited, nums. sorted ( ) )
16
14
17
15
return res
18
16
}
19
17
20
- private func _dfs( inout res: [ [ Int ] ] , inout _ path: [ Int ] , _ nums: [ Int ] , inout _ visited: [ Bool ] ) {
21
- // termination case
18
+ private func dfs( _ res: inout [ [ Int ] ] , _ path: inout [ Int ] , _ isVisited: inout [ Bool ] , _ nums: [ Int ] ) {
22
19
if path. count == nums. count {
23
20
res. append ( path)
24
21
return
25
22
}
26
23
27
- for i in 0 ..< nums. count {
28
- if visited [ i ] || ( i > 0 && nums [ i] == nums [ i - 1 ] && visited [ i - 1 ] ) {
29
- continue
24
+ for (i , num ) in nums. enumerated ( ) where !isVisited [ i ] {
25
+ if i > 0 && nums [ i] == nums [ i - 1 ] && !isVisited [ i - 1 ] {
26
+ continue
30
27
}
31
28
32
- path. append ( nums [ i ] )
33
- visited [ i] = true
34
- _dfs ( & res, & path, nums , & visited )
35
- visited [ i] = false
29
+ path. append ( num )
30
+ isVisited [ i] = true
31
+ dfs ( & res, & path, & isVisited , nums )
32
+ isVisited [ i] = false
36
33
path. removeLast ( )
37
34
}
38
35
}
0 commit comments