backTrack($nums, 0, []); return $this->result; } function backTrack($nums, $step, $path) { if($step === count($nums)){ $this->result[] = $path; return; } for ($i = 0; $i < count($nums); $i++){ if($this->vis[$i] || ($i > 0 && $nums[$i] === $nums[$i - 1] && !$this->vis[$i - 1])) continue; $path[] = $nums[$i]; $this->vis[$i] = true; $this->backTrack($nums, $step + 1, $path); $this->vis[$i] = false; array_pop($path); } } }