1. 概述

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]

输出:

[

[3],

[1],

[2],

[1,2,3],

[1,3],

[2,3],

[1,2],

[]

]

2. 解题

  1. <?php
  2. class Solution {
  3. private $ret = [];
  4. /**
  5. * @param Integer[] $nums
  6. * @return Integer[][]
  7. */
  8. public function subsets($nums) {
  9. $this->ret[] = [];
  10. for ($i = 1; $i <= count($nums); $i++) {
  11. $this->do($nums, $i);
  12. }
  13. return $this->ret;
  14. }
  15. private function do($nums, $n = 1, $k = 0, $arr = []) {
  16. if (count($arr) == $n) {
  17. $this->ret[] = $arr;
  18. return;
  19. }
  20. if ($k > count($nums) - 1) {
  21. return;
  22. }
  23. for ($i = $k; $i < count($nums); $i++) {
  24. array_push($arr, $nums[$i]);
  25. $this->do($nums, $n, $i + 1, $arr);
  26. array_pop($arr);
  27. }
  28. return;
  29. }
  30. }
  31. $nums = [1, 2, 3];
  32. $cls = new Solution();
  33. $r = $cls->subsets($nums);
  34. array_walk($r, function (&$v) {
  35. $v = implode(',', $v);
  36. });
  37. print_r($r);