From fddfc74b0e392746e567310ba1c1e58eca5b0975 Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Thu, 15 Jul 2021 14:28:20 +0800 Subject: [PATCH] =?UTF-8?q?31:=E4=B8=8B=E4=B8=80=E4=B8=AA=E6=8E=92?= =?UTF-8?q?=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leetcode/editor/cn/NextPermutation.java | 96 +++++++++++++++++++ .../leetcode/editor/cn/NextPermutation.md | 45 +++++++++ 2 files changed, 141 insertions(+) create mode 100644 src/main/java/leetcode/editor/cn/NextPermutation.java create mode 100644 src/main/java/leetcode/editor/cn/NextPermutation.md diff --git a/src/main/java/leetcode/editor/cn/NextPermutation.java b/src/main/java/leetcode/editor/cn/NextPermutation.java new file mode 100644 index 0000000..eb83283 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/NextPermutation.java @@ -0,0 +1,96 @@ +//实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 +// +// 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 +// +// 必须 原地 修改,只允许使用额外常数空间。 +// +// +// +// 示例 1: +// +// +//输入:nums = [1,2,3] +//输出:[1,3,2] +// +// +// 示例 2: +// +// +//输入:nums = [3,2,1] +//输出:[1,2,3] +// +// +// 示例 3: +// +// +//输入:nums = [1,1,5] +//输出:[1,5,1] +// +// +// 示例 4: +// +// +//输入:nums = [1] +//输出:[1] +// +// +// +// +// 提示: +// +// +// 1 <= nums.length <= 100 +// 0 <= nums[i] <= 100 +// +// Related Topics 数组 双指针 +// 👍 1221 👎 0 + +package leetcode.editor.cn; + +//31:下一个排列 +public class NextPermutation { + public static void main(String[] args) { + //测试代码 + Solution solution = new NextPermutation().new Solution(); + } + + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + public void nextPermutation(int[] nums) { + if (nums.length < 2) { + return; + } + int i = nums.length - 2; + for (; i >= 0; i--) { + if (nums[i] < nums[i + 1]) { + break; + } + } + if (i != -1) { + int j = i + 1; + for (; j < nums.length; j++) { + if (nums[j] <= nums[i]) { + break; + } + } + swap(nums, i, j - 1); + } + int start = i + 1; + int end = nums.length - 1; + while (start < end) { + swap(nums, start, end); + start++; + end--; + } + } + + private void swap(int[] nums, int i, int j) { + int temp = nums[i]; + nums[i] = nums[j]; + nums[j] = temp; + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file diff --git a/src/main/java/leetcode/editor/cn/NextPermutation.md b/src/main/java/leetcode/editor/cn/NextPermutation.md new file mode 100644 index 0000000..b675f52 --- /dev/null +++ b/src/main/java/leetcode/editor/cn/NextPermutation.md @@ -0,0 +1,45 @@ +

实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

+ +

如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

+ +

必须 原地 修改,只允许使用额外常数空间。

+ +

 

+ +

示例 1:

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

示例 2:

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

示例 3:

+ +
+输入:nums = [1,1,5]
+输出:[1,5,1]
+
+ +

示例 4:

+ +
+输入:nums = [1]
+输出:[1]
+
+ +

 

+ +

提示:

+ + +
Related Topics
  • 数组
  • 双指针
  • \n
  • 👍 1221
  • 👎 0
  • \ No newline at end of file