1. 概述

给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)

说明:解集不能包含重复的子集。

示例:

输入: [1,2,2]

输出:

[

[2],

[1],

[1,2,2],

[2,2],

[1,2],

[]

]

2. 解题

  1. <?php
  2. class Solution
  3. {
  4. private $ret = [];
  5. /**
  6. * @param Integer[] $nums
  7. * @return Integer[][]
  8. */
  9. public function subsetsWithDup($nums)
  10. {
  11. sort($nums);
  12. $this->do($nums);
  13. return $this->ret;
  14. }
  15. public function do(array $nums, array $array = [], int $start = 0)
  16. {
  17. array_push($this->ret, $array);
  18. for ($i = $start; $i < count($nums); $i++) {
  19. if ($i != $start && $nums[$i] == $nums[$i - 1]) {
  20. continue;
  21. }
  22. array_push($array, $nums[$i]);
  23. $this->do($nums, $array, $start);
  24. array_pop($array);
  25. }
  26. }
  27. }
  28. $nums = [1, 2, 2];
  29. $cls = new Solution();
  30. $ret = $cls->subsetsWithDup($nums);
  31. print_r($ret);