Skip to content

Commit cc226a4

Browse files
committed
数组全排列(重复元素/无重复元素)
1 parent fc73c29 commit cc226a4

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed

Backtracking/46_Permutations.py

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# coding: utf8
2+
3+
4+
"""
5+
题目链接: https://leetcode.com/problems/permutations/description.
6+
题目描述:
7+
8+
Given a collection of distinct numbers, return all possible permutations.
9+
10+
For example,
11+
[1,2,3] have the following permutations:
12+
[
13+
[1,2,3],
14+
[1,3,2],
15+
[2,1,3],
16+
[2,3,1],
17+
[3,1,2],
18+
[3,2,1]
19+
]
20+
21+
"""
22+
23+
24+
class Solution(object):
25+
def permuteUnique(self, nums):
26+
"""
27+
:type nums: List[int]
28+
:rtype: List[List[int]]
29+
"""
30+
if not nums:
31+
return []
32+
33+
ans = []
34+
sub = []
35+
visited = [0 for _ in range(len(nums))]
36+
self.backtrace(nums, visited, sub, ans)
37+
38+
return ans
39+
40+
def backtrace(self, nums, visited, sub, ans):
41+
if len(sub) == len(nums):
42+
ans.append(sub[:])
43+
else:
44+
for i in range(len(nums)):
45+
if not visited[i]:
46+
visited[i] = 1
47+
sub.append(nums[i])
48+
self.backtrace(nums, visited, sub, ans)
49+
sub.pop()
50+
visited[i] = 0

Backtracking/47_PermutationsII.py

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# coding: utf8
2+
3+
4+
"""
5+
题目链接: https://leetcode.com/problems/permutations-ii/description.
6+
题目描述:
7+
8+
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
9+
10+
For example,
11+
[1,1,2] have the following unique permutations:
12+
[
13+
[1,1,2],
14+
[1,2,1],
15+
[2,1,1]
16+
]
17+
18+
"""
19+
20+
21+
class Solution(object):
22+
def permuteUnique(self, nums):
23+
"""
24+
:type nums: List[int]
25+
:rtype: List[List[int]]
26+
"""
27+
if not nums:
28+
return []
29+
30+
ans = []
31+
sub = []
32+
visited = [0 for _ in range(len(nums))]
33+
nums.sort()
34+
self.backtrace(nums, visited, sub, ans)
35+
36+
return ans
37+
38+
def backtrace(self, nums, visited, sub, ans):
39+
if len(sub) == len(nums):
40+
ans.append(sub[:])
41+
else:
42+
for i in range(len(nums)):
43+
if not visited[i]:
44+
# 前面有重复元素未使用
45+
if i > 0 and nums[i] == nums[i - 1] and not visited[i - 1]:
46+
continue
47+
visited[i] = 1
48+
sub.append(nums[i])
49+
self.backtrace(nums, visited, sub, ans)
50+
sub.pop()
51+
visited[i] = 0

0 commit comments

Comments
 (0)