问题描述:给定一个数组是一个全排列,寻找下一个全排列。例如123->132, 321->123, 115->151.

算法分析:从后往前寻找顺序,找到后从往前寻找第一个大于当前元素,即第一个逆序,然后元素交换,重新sort当前元素后面的元素。如果都是逆序,reverse数组。

 package Leecode_Permutation;

 import java.util.Arrays;

 public class NextPermutation {
public void nextPermutation(int[] num)
{
if(num.length <= 1)
{
return ;
}
//从后往前,找正序,下一个是逆序
for(int i = num.length - 2; i >= 0; i--)
{
if(num[i] < num[i+1])
{
int j;
for(j = num.length - 1; j >= i; j--)
{
if(num[i] < num[j])
{
break;
}
}
// swap the two numbers.
//num[i] = num[i] ^ num[j];
//num[j] = num[i] ^ num[j];
//num[i] = num[i] ^ num[j]; int temp = num[i];
num[i] = num[j];
num[j] = temp; //sort the rest of arrays after the swap point.
Arrays.sort(num, i+1, num.length);
return ;
}
}
//如果都是逆序,说明下一个全排列是正序,reverse it。
for(int i = 0; i < num.length / 2; i++)
{
int tmp = num[i];
num[i] = num[num.length - i - 1];
num[num.length - i - 1] = tmp;
}
return ; }
public static void main(String[] args) {
NextPermutation np = new NextPermutation();
int[] num = {1,2};
np.nextPermutation(num);
for (int i : num) {
System.out.println(i);
}
}
}

NextPermutation,寻找下一个全排列的更多相关文章

  1. LeetCode 31 Next Permutation(下一个全排列)

    题目链接: https://leetcode.com/problems/next-permutation/?tab=Description   Problem :寻找给定int数组的下一个全排列(要求 ...

  2. 寻找下一个结点 牛客网 程序员面试金典 C++ java Python

    寻找下一个结点 牛客网 程序员面试金典 C++ java Python 题目描述 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继). 给定树的根结点指针TreeNode* root ...

  3. 31. Next Permutation (下一个全排列)

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

  4. LeetCode 31. 下一个排列(Next Permutation)

    题目描述 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常 ...

  5. 556. 下一个更大元素 III

    556. 下一个更大元素 III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 1 ...

  6. 引爆公式让你的APP游戏成为下一个“爆款”

    在2014年的移动互联网领域,“魔漫相机”是一款值得关注的产品.虽然没有腾讯.百度或阿里巴巴等大资源的支持,但是这款应用一上线就在中国市场发展迅猛,日下载量超过80万次,最高一日达300万次.类似的成 ...

  7. C++构造 下一个排列 的函数

    今天围观刘汝佳神犇的白书发现了一个好用的函数: next_permutation(); 可以用于可重, 或者不可重集, 寻找下一个排列. 时间复杂度尚不明. //适用于不可重和可重集的排列. # in ...

  8. poj 1146 ID Codes (字符串处理 生成排列组合 生成当前串的下一个字典序排列 【*模板】 )

    ID Codes Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6229   Accepted: 3737 Descript ...

  9. 排列算法汇总(下一个排列,全排列,第K个排列)

    一.下一个排列 首先,STL提供了两个用来计算排列组合关系的算法,分别是next_permutation和prev_permutation. next_permutation(nums.begin() ...

随机推荐

  1. windosw启动redis

    1.cmd控制台 cd C:\Program Files\Redis 2.redis-server.exe redis.windows.conf 3. ok!!

  2. mongoDB-----针对某个或多个文档只需要部分更新可使用原子的更新修改器

    update() db.collection.update( <query>, <update>, { upsert: <boolean>, multi: < ...

  3. kafka_2.11-0.10.1.1集群搭建安装配置

    在搭建kafka集群之前,请保证zookeeper已安装. 1.下载 官网下载链接:http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/0.10.1.1/ ...

  4. 让WebApi支持Namespace

    环境:VS2012 .net 4.0 参考: http://aspnet.codeplex.com/SourceControl/changeset/view/dd207952fa86#Samples/ ...

  5. Tornado源码浅析

    初识tornado 经典的hello world 案例: import tornado.ioloop import tornado.web class MainHandler(tornado.web. ...

  6. tortoisegit错误: disconnected - no supported authentication methods available(server sent: publickey)

    修改小乌龟的 SSH客户端:

  7. pip与apt-get

    在ubuntu服务器下安装包的时候,经常会用到sudo apt-get install 包名 或 sudo pip install 包名,那么两者有什么区别呢? 1.区别 pip用来安装来自PyPI( ...

  8. Java基础 - 面向对象 - 构造方法

    在类中除了成员方法之外,还存在一种特殊类型的方法,那就是构造方法.构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的.每当类实例化一个对象时,类都会自动调用构造方法. 构造方法的特点: 构 ...

  9. Delphi中MD5实现方法(转)

    原来写过一个计算MD5的程序,是用了一个叫MD5.pas的单元,使用起来还算简单,但还有更简单的办法,安装了indy就会有IdHashMessageDigest单元(delphi 7默认安装indy) ...

  10. 再谈Redis应用场景(转)

    原文:在谈Redis应用场景 一.MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样 ...