源题目
https://leetcode-cn.com/problems/permutations/
46. 全排列
难度中等1502
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
输入:nums = [0,1] 输出:[[0,1],[1,0]]
示例 3:
输入:nums = [1] 输出:[[1]]
提示:
- 1 <= nums.length <= 6
- -10 <= nums[i] <= 10
- nums 中的所有整数 互不相同
通过次数389,617
提交次数498,182
class Solution {/*** @param Integer[] $nums* @return Integer[][]*/function permute($nums) {$ret = [];if(!$nums) return $ret;$this->permuteCore($nums, 0, $ret);return $ret;}// 回溯求解function permuteCore(&$nums, $begin, &$ret){$len = count($nums);if($begin >= $len){ // 到达最后一元素 打印该排列$res = [];foreach($nums as $num){$res[] = $num;}$ret[] = $res;return ;}for ($i = $begin; $i < $len; ++$i) {$temp = $nums[$begin];// 交换首元素和i位置元素$nums[$begin] = $nums[$i];$nums[$i] = $temp;$this->permuteCore($nums, $begin+1, $ret); // 递归到下一个元素$temp = $nums[$begin];// 恢复交换前位置$nums[$begin] = $nums[$i];$nums[$i] = $temp;}}}
