leetcode做题记录0031

leetcode 0031

说明

只是为了记录一下,不求多快,也不深究。

会简要描述思路,代码中不写注释。

如碰到不会做的用了别人代码会在博客中标出。

题目描述

在这里插入图片描述

思路

如果已经是最大,倒序一下。

否则的话,找出后一个比前一个数大的位置,i-1和i。

从i之后找出比i-1大的最小的数next,交换i-1和next。

再给i之后的数组排一下序。

class Solution {
    public void nextPermutation(int[] nums) {
		if (nums.length < 2) {
			return;
		}
		boolean isLargest = true;
		for (int i = nums.length - 1; i > 0; i--) {
			if (nums[i] > nums[i - 1]) {
				isLargest = false;
				int next = i - 1;
				for (int j = i; j < nums.length; j++) {
					if (nums[j] <= nums[i - 1]) {
						continue;
					} else {
						if (next == i - 1) {
							next = j;
						} else {
							if (nums[next] > nums[j]) {
								next = j;
							}
						}
					}
				}
				int temp = 0;
				temp = nums[next];
				nums[next] = nums[i - 1];
				nums[i - 1] = temp;
				Arrays.sort(nums, i, nums.length);
				return;

			}
		}
		if (isLargest) {
			for (int i = 0, j = nums.length - 1; i < j; i++, j--) {
				int temp = 0;
				temp = nums[i];
				nums[i] = nums[j];
				nums[j] = temp;
			}
			return;
		}
	}
}
发布了77 篇原创文章 · 获赞 1 · 访问量 2063

猜你喜欢

转载自blog.csdn.net/Paul_1i/article/details/104988277