Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 7882856

Browse files
zhangzz2015gitbook-bot
authored andcommitted
GitBook: [greyireland#116] No subject
1 parent b85d2f6 commit 7882856

File tree

1 file changed

+37
-42
lines changed

1 file changed

+37
-42
lines changed

‎advanced_algorithm/backtrack.md‎

Lines changed: 37 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -222,50 +222,45 @@ public:
222222

223223
### [permutations-ii](https://leetcode-cn.com/problems/permutations-ii/)
224224

225-
> 给定一个可包含重复数字的序列,返回所有不重复的全排列。
225+
> 给定一个可包含重复数字的序列,返回所有不重复的全排列。注意剪枝策略,包括去重复
226226

227227
```go
228-
import (
229-
"sort"
230-
)
231-
232-
func permuteUnique(nums []int) [][]int {
233-
result := make([][]int, 0)
234-
list := make([]int, 0)
235-
// 标记这个元素是否已经添加到结果集
236-
visited := make([]bool, len(nums))
237-
sort.Ints(nums)
238-
backtrack(nums, visited, list, &result)
239-
return result
240-
}
241-
242-
// nums 输入集合
243-
// visited 当前递归标记过的元素
244-
// list 临时结果集
245-
// result 最终结果
246-
func backtrack(nums []int, visited []bool, list []int, result *[][]int) {
247-
// 临时结果和输入集合长度一致 才是全排列
248-
if len(list) == len(nums) {
249-
subResult := make([]int, len(list))
250-
copy(subResult, list)
251-
*result = append(*result, subResult)
252-
}
253-
for i := 0; i < len(nums); i++ {
254-
// 已经添加过的元素,直接跳过
255-
if visited[i] {
256-
continue
257-
}
258-
// 上一个元素和当前相同,并且没有访问过就跳过
259-
if i != 0 && nums[i] == nums[i-1] && !visited[i-1] {
260-
continue
261-
}
262-
list = append(list, nums[i])
263-
visited[i] = true
264-
backtrack(nums, visited, list, result)
265-
visited[i] = false
266-
list = list[0 : len(list)-1]
267-
}
268-
}
228+
class Solution {
229+
public:
230+
vector<vector<int>> permuteUnique(vector<int>& nums) {
231+
232+
sort(nums.begin(), nums.end());
233+
vector<int> onePath;
234+
vector<vector<int>> ret;
235+
vector<bool> visit(nums.size(), false);
236+
backTrack(nums, visit, onePath, ret);
237+
238+
return ret;
239+
}
240+
241+
242+
243+
void backTrack(vector<int>& nums, vector<bool>& visit, vector<int>& onePath, vector<vector<int>>& ret)
244+
{
245+
if(onePath.size()==nums.size())
246+
{
247+
ret.push_back(onePath);
248+
return;
249+
}
250+
251+
for(int i=0; i< nums.size(); i++)
252+
{
253+
if(visit[i]) continue;
254+
if(i>0 && nums[i]==nums[i-1] && visit[i-1]==false) continue;
255+
visit[i] = true;
256+
onePath.push_back(nums[i]);
257+
backTrack(nums, visit, onePath, ret);
258+
onePath.pop_back();
259+
visit[i] = false;
260+
}
261+
}
262+
263+
};
269264
```
270265
271266
### [N-Queens](https://leetcode.com/problems/n-queens/)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /