`
hcx2013
  • 浏览: 88799 次
社区版块
存档分类
最新评论

Next Permutation

 
阅读更多

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

题目意思:给你一串数,要找到下一个排列,比这个排列大,并且恰好比这个排列大,就是说对于原排列和新排列没法找到另一个排列插在这二者之间。比如1,2,3,值是123,那么下一个排列就是132,你没法找到一个居于123和132之间的排列。

 

 

public class Solution {
    public void nextPermutation(int[] nums) {
    	if (nums == null || nums.length == 0) {
    		return ;
    	}
        int i = nums.length-2;
        while (i >= 0 && nums[i] >= nums[i+1]) {
        	i--;
        }
        if (i >= 0) {
        	int j = i + 1;
        	while (j < nums.length && nums[j] > nums[i]) {
        		j++;
        	}
        	j--;
        	swap(nums, i, j);
        }
        reverse(nums, i+1, nums.length-1);
    }

	private void reverse(int[] nums, int i, int j) {
		// TODO Auto-generated method stub
		while (i < j) {
			swap(nums, i,j);
			i++;
			j--;
		}
	}

	private void swap(int[] nums, int i, int j) {
		// TODO Auto-generated method stub
		int tmp = nums[i];
		nums[i] = nums[j];
		nums[j] = tmp;
	}
}

 

 

0
1
分享到:
评论

相关推荐

    java-leetcode题解之Next Permutation.java

    java java_leetcode题解之Next Permutation.java

    31.Next Permutation 下一个排列【LeetCode单题讲解系列】

    31.Next_Permutation_下一个排列【LeetCode单题讲解系列】

    Perm_char.zip_The Next_permutation

    标题"Perm_char.zip_The Next_permutation"暗示了我们讨论的主题是关于C++中的下一个字典序排列。这个功能可以帮助我们在已排序的字符序列中找到下一个按字典顺序排列的序列。在C++标准库中,`std::next_permutation...

    PermutationAndCombination(JAVA).rar_java permutation_java 算法_per

    - `nextPermutation`/`nextCombination`:在现有排列或组合基础上生成下一个排列或组合,用于迭代实现。 `www.pudn.com.txt` 文件可能是下载来源的记录或者包含了一些关于算法的附加说明,具体内容需要查看才能确定...

    2017年计算机等级考试二级C++辅导:全罗列生成算法:next_permutation .docx

    "2017年计算机等级考试二级C++辅导:全罗列生成算法:next_permutation" 本文将详细介绍C++/STL中的next_permutation函数,包括其概念、内部算法和实现细节。 概念: next_permutation函数是C++/STL中定义的一个...

    详谈全排列next_permutation() 函数的用法(推荐)

    4 }while(next_permutation(a,a+n)); 下面的代码可产生1~n的全排列 #include #include using namespace std; int main(){ int n; while(scanf("%d",&n)&&n){ int a[1000]; for(int i=0;i&lt;n;i++){ scanf(...

    排列_next_permutation1

    "排列_next_permutation1" 在计算机科学中,排列是指一个集合中元素的排列顺序。对于一个给定的集合,可能存在多种不同的排列方式。next_permutation 函数是 C++/STL 中定义的函数之一,它可以生成给定序列的下一个...

    全排列VC源代码,仅供参考

    全排列是一种经典的算法问题,广泛应用于计算机科学,特别是在数据结构和算法的学习中。在VC(Visual C++)环境中,我们通常使用C++编程语言来实现这类算法。全排列是指从n个不同元素中取出m(m≤n)个元素,按照...

    js-leetcode题解之31-next-permutation.js

    js js_leetcode题解之31-next-permutation.js

    next_permutation和prev_permutation两个STL自带排列函数

    一:next_permutation(start,end,//cmp) 使用默认排序方法:按照字典序从小到大 int arr[3]={1,2,3}; do{ for(int num:arr){ cout&lt;&lt;num&lt;&lt; ; } cout&lt;&lt;endl; }while(next_permutation...

    生成全排列矩阵.zip

    在MATLAB中,可以通过定义递归函数,利用“backtracking”或“nextPermutation”等方法实现。具体来说,可以从第一个元素开始,依次尝试与后面的每个元素交换位置,如果满足全排列条件,则记录下来,并继续对下一个...

    华为OD机试C卷- 田忌赛马(Java & JS & Python & C).md-私信看全套OD代码及解析

    private static boolean nextPermutation(int[] nums) { int i = nums.length - 2; while (i &gt;= 0 && nums[i] &gt;= nums[i + 1]) { i--; } if (i ) return false; int j = nums.length - 1; while (nums[j] [i...

    next_permutation.cpp

    全排列.

    排列组合生成算法

    - **Next Permutation**:这是C++标准库提供的一种生成下一个排列的方法(`std::next_permutation`)。通过比较元素并交换它们的位置,可以找到序列中的下一个排列。 2. **组合算法实现**: - **组合计数**:组合...

    c++-c++编程基础之leetcode题解第31题下一个排列.zip

    void nextPermutation(std::vector&lt;int&gt;& nums) { int n = nums.size(); if (n ) return; // 反向查找 int pivotIndex = n - 2; while (pivotIndex &gt;= 0 && nums[pivotIndex] &gt;= nums[pivotIndex + 1]) { ...

    某论坛谈论的过桥算法

    4. 使用`ArraySort`和`nextPermutation`方法生成所有可能的过桥顺序。 ### 总结 过桥算法是一种经典的计算机科学问题,旨在优化资源分配和路径规划。通过对不同策略的比较,可以找到最优的解决方案,从而在有限的...

    算法分析和实验报告

    可以使用“Next Permutation”算法,该算法可以在原地修改数组,找到下一个字典序更大的排列。 4. **整数因子分解问题**:这是数论中的经典问题,旨在将一个大整数分解为更小的质因数。常用的方法有Pollard's rho...

Global site tag (gtag.js) - Google Analytics