@@ -176,6 +176,42 @@ public:
176
176
};
177
177
```
178
178
179
+ ### ** C#**
180
+
181
+ ``` cs
182
+ using System .Collections .Generic ;
183
+ using System .Linq ;
184
+
185
+ public class Solution {
186
+ public IList <IList <int >> Permute (int [] nums ) {
187
+ var results = new List <IList <int >>();
188
+ var temp = new List <int >();
189
+ var visited = new bool [nums .Length ];
190
+ Search (nums , visited , temp , results );
191
+ return results ;
192
+ }
193
+
194
+ private void Search (int [] nums , bool [] visited , IList <int > temp , IList <IList <int >> results )
195
+ {
196
+ int count = 0 ;
197
+ for (var i = 0 ; i < nums .Length ; ++ i )
198
+ {
199
+ if (visited [i ]) continue ;
200
+ ++ count ;
201
+ temp .Add (nums [i ]);
202
+ visited [i ] = true ;
203
+ Search (nums , visited , temp , results );
204
+ temp .RemoveAt (temp .Count - 1 );
205
+ visited [i ] = false ;
206
+ }
207
+ if (count == 0 && temp .Any ())
208
+ {
209
+ results .Add (new List <int >(temp ));
210
+ }
211
+ }
212
+ }
213
+ ```
214
+
179
215
### ** Go**
180
216
181
217
``` go
@@ -210,19 +246,19 @@ func dfs(u, n int, nums []int, used []bool, path []int, res *[][]int) {
210
246
211
247
``` ts
212
248
function permute(nums : number []): number [][] {
249
+ const n = nums .length ;
213
250
const res: number [][] = [];
214
- const dfs = (paths : number []) => {
215
- if (paths .length === nums .length ) {
216
- res .push (paths );
217
- return ;
251
+ const dfs = (i : number ) => {
252
+ if (i === n ) {
253
+ res .push ([... nums ]);
218
254
}
219
- for (const num of nums ) {
220
- if ( ! paths . includes ( num )) {
221
- dfs (paths . concat ( num ) );
222
- }
255
+ for (let j = i ; j < n ; j ++ ) {
256
+ [ nums [ i ], nums [ j ]] = [ nums [ j ], nums [ i ]];
257
+ dfs (i + 1 );
258
+ [ nums [ i ], nums [ j ]] = [ nums [ j ], nums [ i ]];
223
259
}
224
260
};
225
- dfs ([] );
261
+ dfs (0 );
226
262
return res ;
227
263
}
228
264
```
@@ -231,23 +267,22 @@ function permute(nums: number[]): number[][] {
231
267
232
268
``` rust
233
269
impl Solution {
234
- fn dfs (nums : & Vec <i32 >, paths : & mut Vec <i32 >, res : & mut Vec <Vec <i32 >>) {
235
- if paths . len () == nums . len () {
236
- res . push (paths . clone ());
270
+ fn dfs (i : usize , nums : & mut Vec <i32 >, res : & mut Vec <Vec <i32 >>) {
271
+ let n = nums . len ();
272
+ if i == n {
273
+ res . push (nums . clone ());
237
274
return ;
238
275
}
239
- for i in nums . iter () {
240
- if ! paths . contains (i ) {
241
- paths . push (* i );
242
- Self :: dfs (nums , paths , res );
243
- paths . pop ();
244
- }
276
+ for j in i .. n {
277
+ nums . swap (i , j );
278
+ Self :: dfs (i + 1 , nums , res );
279
+ nums . swap (i , j );
245
280
}
246
281
}
247
282
248
- pub fn permute (nums : Vec <i32 >) -> Vec <Vec <i32 >> {
283
+ pub fn permute (mut nums : Vec <i32 >) -> Vec <Vec <i32 >> {
249
284
let mut res = vec! [];
250
- Self :: dfs (& nums , & mut vec! [] , & mut res );
285
+ Self :: dfs (0 , & mut nums , & mut res );
251
286
res
252
287
}
253
288
}
0 commit comments