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


### 题目描述补充 **题目:下一个排列Ⅰ** 给定一个整数数组 `nums`,其中元素已按非递减顺序排列。编写一个函数,将 `nums` 重新排列成下一个排列,即字典序上比当前排列大的最小排列。 **注意**: - 数组中的元素个数在范围 `[1, 100]` 内。 - `0 <= nums[i] <= 100` **示例 1**: ``` 输入: nums = [1,2,3] 输出: [1,3,2] ``` **示例 2**: ``` 输入: nums = [3,2,1] 输出: [1,2,3] ``` **示例 3**: ``` 输入: nums = [1,1,5] 输出: [1,5,1] ``` ### PHP 示例代码 ```php function nextPermutation(&$nums) { $n = count($nums); $i = $n - 2; // 从右向左找到第一个相邻的元素对 (i, i+1),使得 nums[i] < nums[i+1] while ($i >= 0 && $nums[$i] >= $nums[$i + 1]) { $i--; } if ($i >= 0) { $j = $n - 1; // 从右向左找到第一个大于 nums[i] 的元素 nums[j] while ($j >= 0 && $nums[$j] <= $nums[$i]) { $j--; } // 交换 nums[i] 和 nums[j] $temp = $nums[$i]; $nums[$i] = $nums[$j]; $nums[$j] = $temp; } // 反转 i+1 及其之后的元素 $left = $i + 1; $right = $n - 1; while ($left < $right) { $temp = $nums[$left]; $nums[$left] = $nums[$right]; $nums[$right] = $temp; $left++; $right--; } } // 示例用法 $nums = [1,2,3]; nextPermutation($nums); print_r($nums); // 输出: Array ( [0] => 1 [1] => 3 [2] => 2 ) ``` ### Python 示例代码 ```python def nextPermutation(nums): i = j = len(nums) - 2 # 找到第一个相邻的元素对 (i, i+1),使得 nums[i] < nums[i+1] while i >= 0 and nums[i] >= nums[i + 1]: i -= 1 if i >= 0: # 找到第一个大于 nums[i] 的元素 nums[j] while j >= 0 and nums[j] <= nums[i]: j -= 1 # 交换 nums[i] 和 nums[j] nums[i], nums[j] = nums[j], nums[i] # 反转 i+1 及其之后的元素 left, right = i + 1, len(nums) - 1 while left < right: nums[left], nums[right] = nums[right], nums[left] left, right = left + 1, right - 1 # 示例用法 nums = [1,2,3] nextPermutation(nums) print(nums) # 输出: [1, 3, 2] ``` ### JavaScript 示例代码 ```javascript function nextPermutation(nums) { let i = nums.length - 2; // 找到第一个相邻的元素对 (i, i+1),使得 nums[i] < nums[i+1] while (i >= 0 && nums[i] >= nums[i + 1]) { i--; } if (i >= 0) { let j = nums.length - 1; // 找到第一个大于 nums[i] 的元素 nums[j] while (j >= 0 && nums[j] <= nums[i]) { j--; } // 交换 nums[i] 和 nums[j] [nums[i], nums[j]] = [nums[j], nums[i]]; } // 反转 i+1 及其之后的元素 let left = i + 1, right = nums.length - 1; while (left < right) { [nums[left], nums[right]] = [nums[right], nums[left]]; left++; right--; } } // 示例用法 let nums = [1,2,3]; nextPermutation(nums); console.log(nums); // 输出: [1, 3, 2] ``` **码小课网站中有更多相关内容分享给大家学习**,包括算法基础、数据结构、面试技巧等,欢迎访问码小课网站深入学习。
推荐面试题