码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 30 Next Permutation

时间:2014-08-28 11:34:29      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:java   leetcode   

Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.

If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).

The replacement must be in-place, do not allocate extra memory.

Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1

思路:使用字典序法
bubuko.com,布布扣
bubuko.com,布布扣

设有排列(p)=2763541,按照字典式排序,它的下一个排列是谁?

(q)=2764135.

(1)2763541  [找最后一个正序35]

(2)2763541[找3后面比3大的最后一个数]

(3)2764531[交换3,4的位置]

(4)2764135[把4后面的531反序排列为135即得到最后的排列(q)]

public class Solution {
	public void nextPermutation(int[] num) {
		int i;
		int cur = -1;
		int temp;
		// find the last increase sequence
		for (i = num.length - 1; i >= 1; i--) {
			if (num[i] > num[i - 1]) {
				cur = i - 1;
				break;
			}
		}

		// if the increase sequence exists,
		//swap the cur and the last one(bigger than it)
		if (cur != -1) {
			for (i = num.length - 1; i > cur; i--) {
				if (num[i] > num[cur]) {
					temp = num[cur];
					num[cur] = num[i];
					num[i] = temp;
					break;
				}
			}
		}

		for (i = cur + 1; 2 * i <= cur + num.length - 1; i++) {
			temp=num[i];
			num[i]=num[num.length-i+cur];
			num[num.length-i+cur]=temp;
		}
	}
}



LeetCode 30 Next Permutation

标签:java   leetcode   

原文地址:http://blog.csdn.net/mlweixiao/article/details/38893507

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!