当前位置: 面试刷题>> 全排列Ⅰ (经典算法题500道)


### 题目描述补充 **题目:全排列Ⅰ** 给定一个没有重复数字的数组 `nums`,返回其所有可能的全排列。你可以按任意顺序返回答案。 **示例 1**: ``` 输入: nums = [1,2,3] 输出: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,2,1],[3,1,2]] ``` **示例 2**: ``` 输入: nums = [0,1] 输出: [[0,1],[1,0]] ``` ### 解题思路 全排列问题是一个经典的回溯算法问题。回溯算法通过递归和剪枝来穷举所有可能的情况,然后找到满足条件的解。对于全排列问题,我们需要依次将数组中的每个元素放到排列的每一个位置,然后递归地处理剩下的元素。 ### PHP 示例代码 ```php function permute($nums) { $result = []; backtrack($nums, [], $result); return $result; } function backtrack($nums, $path, &$result) { if (empty($nums)) { $result[] = $path; return; } foreach ($nums as $num) { $index = array_search($num, $nums); array_splice($nums, $index, 1); // 移除当前元素 $path[] = $num; backtrack($nums, $path, $result); array_splice($nums, $index, 0, [$num]); // 恢复数组 array_pop($path); } } // 示例用法 $nums = [1, 2, 3]; $result = permute($nums); print_r($result); ``` ### Python 示例代码 ```python def permute(nums): def backtrack(first=0): if first == n: output.append(nums[:]) for i in range(first, n): nums[first], nums[i] = nums[i], nums[first] backtrack(first + 1) nums[first], nums[i] = nums[i], nums[first] n = len(nums) output = [] backtrack() return output # 示例用法 nums = [1, 2, 3] result = permute(nums) print(result) ``` ### JavaScript 示例代码 ```javascript function permute(nums) { const result = []; function backtrack(path) { if (path.length === nums.length) { result.push([...path]); return; } for (let i = 0; i < nums.length; i++) { if (path.includes(nums[i])) continue; // 排除已使用的数字 path.push(nums[i]); backtrack(path); path.pop(); } } backtrack([]); return result; } // 示例用法 const nums = [1, 2, 3]; const result = permute(nums); console.log(result); ``` 以上代码示例展示了如何使用 PHP、Python 和 JavaScript 编写全排列问题的解决方案。码小课网站中有更多相关内容分享给大家学习,包括回溯算法的其他应用和优化方法。
推荐面试题