@@ -222,50 +222,45 @@ public:
222
222
223
223
### [ permutations-ii] ( https://leetcode-cn.com/problems/permutations-ii/ )
224
224
225
- > 给定一个可包含重复数字的序列,返回所有不重复的全排列。
225
+ > 给定一个可包含重复数字的序列,返回所有不重复的全排列。注意剪枝策略,包括去重复
226
226
227
227
```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
+ };
269
264
```
270
265
271
266
### [N-Queens](https://leetcode.com/problems/n-queens/)
0 commit comments