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; } }
相关推荐
java java_leetcode题解之Next Permutation.java
31.Next_Permutation_下一个排列【LeetCode单题讲解系列】
标题"Perm_char.zip_The Next_permutation"暗示了我们讨论的主题是关于C++中的下一个字典序排列。这个功能可以帮助我们在已排序的字符序列中找到下一个按字典顺序排列的序列。在C++标准库中,`std::next_permutation...
- `nextPermutation`/`nextCombination`:在现有排列或组合基础上生成下一个排列或组合,用于迭代实现。 `www.pudn.com.txt` 文件可能是下载来源的记录或者包含了一些关于算法的附加说明,具体内容需要查看才能确定...
"2017年计算机等级考试二级C++辅导:全罗列生成算法:next_permutation" 本文将详细介绍C++/STL中的next_permutation函数,包括其概念、内部算法和实现细节。 概念: next_permutation函数是C++/STL中定义的一个...
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<n;i++){ scanf(...
"排列_next_permutation1" 在计算机科学中,排列是指一个集合中元素的排列顺序。对于一个给定的集合,可能存在多种不同的排列方式。next_permutation 函数是 C++/STL 中定义的函数之一,它可以生成给定序列的下一个...
全排列是一种经典的算法问题,广泛应用于计算机科学,特别是在数据结构和算法的学习中。在VC(Visual C++)环境中,我们通常使用C++编程语言来实现这类算法。全排列是指从n个不同元素中取出m(m≤n)个元素,按照...
js js_leetcode题解之31-next-permutation.js
一:next_permutation(start,end,//cmp) 使用默认排序方法:按照字典序从小到大 int arr[3]={1,2,3}; do{ for(int num:arr){ cout<<num<< ; } cout<<endl; }while(next_permutation...
在MATLAB中,可以通过定义递归函数,利用“backtracking”或“nextPermutation”等方法实现。具体来说,可以从第一个元素开始,依次尝试与后面的每个元素交换位置,如果满足全排列条件,则记录下来,并继续对下一个...
private static boolean nextPermutation(int[] nums) { int i = nums.length - 2; while (i >= 0 && nums[i] >= nums[i + 1]) { i--; } if (i ) return false; int j = nums.length - 1; while (nums[j] [i...
全排列.
- **Next Permutation**:这是C++标准库提供的一种生成下一个排列的方法(`std::next_permutation`)。通过比较元素并交换它们的位置,可以找到序列中的下一个排列。 2. **组合算法实现**: - **组合计数**:组合...
void nextPermutation(std::vector<int>& nums) { int n = nums.size(); if (n ) return; // 反向查找 int pivotIndex = n - 2; while (pivotIndex >= 0 && nums[pivotIndex] >= nums[pivotIndex + 1]) { ...
4. 使用`ArraySort`和`nextPermutation`方法生成所有可能的过桥顺序。 ### 总结 过桥算法是一种经典的计算机科学问题,旨在优化资源分配和路径规划。通过对不同策略的比较,可以找到最优的解决方案,从而在有限的...
可以使用“Next Permutation”算法,该算法可以在原地修改数组,找到下一个字典序更大的排列。 4. **整数因子分解问题**:这是数论中的经典问题,旨在将一个大整数分解为更小的质因数。常用的方法有Pollard's rho...