@@ -133,11 +133,11 @@ class Solution {
133133class Solution {
134134public:
135135 vector<vector<int >> subsetsWithDup(vector<int >& nums) {
136- sort(nums.begin(), nums.end() );
136+ ranges:: sort(nums);
137137 vector<vector<int >> ans;
138138 vector<int > t;
139139 int n = nums.size();
140- function<void(int)> dfs = [ &] (int i) {
140+ auto dfs = [ &] (this auto&& dfs, int i) {
141141 if (i >= n) {
142142 ans.push_back(t);
143143 return;
@@ -160,7 +160,7 @@ public:
160160
161161```go
162162func subsetsWithDup(nums []int) (ans [][]int) {
163- sort.Ints (nums)
163+ slices.Sort (nums)
164164 n := len(nums)
165165 t := []int{}
166166 var dfs func(int)
@@ -239,6 +239,67 @@ impl Solution {
239239}
240240```
241241
242+ #### JavaScript
243+
244+ ``` js
245+ /**
246+ * @param {number[]} nums
247+ * @return {number[][]}
248+ */
249+ var subsetsWithDup = function (nums ) {
250+ nums .sort ((a , b ) => a - b);
251+ const n = nums .length ;
252+ const t = [];
253+ const ans = [];
254+ const dfs = i => {
255+ if (i >= n) {
256+ ans .push ([... t]);
257+ return ;
258+ }
259+ t .push (nums[i]);
260+ dfs (i + 1 );
261+ t .pop ();
262+ while (i + 1 < n && nums[i] === nums[i + 1 ]) {
263+ i++ ;
264+ }
265+ dfs (i + 1 );
266+ };
267+ dfs (0 );
268+ return ans;
269+ };
270+ ```
271+
272+ #### C#
273+
274+ ``` cs
275+ public class Solution {
276+ private IList <IList <int >> ans = new List <IList <int >>();
277+ private IList <int > t = new List <int >();
278+ private int [] nums ;
279+
280+ public IList <IList <int >> SubsetsWithDup (int [] nums ) {
281+ Array .Sort (nums );
282+ this .nums = nums ;
283+ Dfs (0 );
284+ return ans ;
285+ }
286+
287+ private void Dfs (int i ) {
288+ if (i >= nums .Length ) {
289+ ans .Add (new List <int >(t ));
290+ return ;
291+ }
292+ t .Add (nums [i ]);
293+ Dfs (i + 1 );
294+ t .RemoveAt (t .Count - 1 );
295+ while (i + 1 < nums .Length && nums [i + 1 ] == nums [i ]) {
296+ ++ i ;
297+ }
298+ Dfs (i + 1 );
299+ }
300+ }
301+ ```
302+
242303<!-- tabs: end -->
243304
244305<!-- solution: end -->
@@ -314,7 +375,7 @@ class Solution {
314375class Solution {
315376public:
316377 vector<vector<int >> subsetsWithDup(vector<int >& nums) {
317- sort(nums.begin(), nums.end() );
378+ ranges:: sort(nums);
318379 int n = nums.size();
319380 vector<vector<int >> ans;
320381 for (int mask = 0; mask < 1 << n; ++mask) {
@@ -421,6 +482,66 @@ impl Solution {
421482}
422483```
423484
485+ #### JavaScript
486+
487+ ``` js
488+ /**
489+ * @param {number[]} nums
490+ * @return {number[][]}
491+ */
492+ var subsetsWithDup = function (nums ) {
493+ nums .sort ((a , b ) => a - b);
494+ const n = nums .length ;
495+ const ans = [];
496+ for (let mask = 0 ; mask < 1 << n; ++ mask) {
497+ const t = [];
498+ let ok = true ;
499+ for (let i = 0 ; i < n; ++ i) {
500+ if (((mask >> i) & 1 ) === 1 ) {
501+ if (i && ((mask >> (i - 1 )) & 1 ) === 0 && nums[i] === nums[i - 1 ]) {
502+ ok = false ;
503+ break ;
504+ }
505+ t .push (nums[i]);
506+ }
507+ }
508+ if (ok) {
509+ ans .push (t);
510+ }
511+ }
512+ return ans;
513+ };
514+ ```
515+
516+ #### C#
517+
518+ ``` cs
519+ public class Solution {
520+ public IList <IList <int >> SubsetsWithDup (int [] nums ) {
521+ Array .Sort (nums );
522+ int n = nums .Length ;
523+ IList < IList < int >> ans = new List <IList <int >>();
524+ for (int mask = 0 ; mask < 1 << n ; ++ mask ) {
525+ IList < int > t = new List <int >();
526+ bool ok = true ;
527+ for (int i = 0 ; i < n ; ++ i ) {
528+ if ((mask >> i & 1 ) == 1 ) {
529+ if (i > 0 && (mask >> (i - 1 ) & 1 ) == 0 && nums [i ] == nums [i - 1 ]) {
530+ ok = false ;
531+ break ;
532+ }
533+ t .Add (nums [i ]);
534+ }
535+ }
536+ if (ok ) {
537+ ans .Add (t );
538+ }
539+ }
540+ return ans ;
541+ }
542+ }
543+ ```
544+
424545<!-- tabs: end -->
425546
426547<!-- solution: end -->
0 commit comments