java字典序全排列
import java.util.Arrays;
/**
*字典序全排列
*字符串的全排列
*比如单词"too" 它的全排列是"oot","oto","too"
*1,从右端开始扫描,若出现前一个比后一个小,记录前一个的元素下表index
*2,再找出index以后比该元素大的中的最小值的下标,(实现见 下面的getMin方法)
*3,index以后的元素实现反转(实现 见下面的reverse方法)
*结束条件:前一个都比后一个大的情况
*/
public class StringExpress{
int getMin(char[]input,int index){
char min=input[index];
int minIndex=index+1;
char result='z';
for(int i=index+1;i<input.length;i++){
if(input[i]>min&&input[i]<result){
result=input[i];
minIndex=i;
}
}
return minIndex;
}
void exchange(char []input,int index,int minIndex){
char temp=input[index];
input[index]=input[minIndex];
input[minIndex]=temp;
}
void reverse(char input[],int first,int end) {
while(first<end){
exchange(input,first,end);
first++;
end--;
}
}
void getDictionary(char c[]){
System.out.println(new String(c));
//boolean flag=true;
int i=0;
while(true){
i=c.length-1;
for(;i>0;i--){
if(c[i-1]<c[i])break;
}
if(i==0)break;
int minIndex=getMin(c,i-1);
exchange(c,i-1,minIndex);
reverse(c,i,c.length-1);
System.out.println(new String(c));
} }
public static void main(String []args){
String input="aat";
char [] c=input.toCharArray();
Arrays.sort(c);
new StringExpress().getDictionary(c);
}
}
java字典序全排列的更多相关文章
- HDOJ-ACM1016(JAVA) 字典序全排列,并剪枝
转载声明:原文转自http://www.cnblogs.com/xiezie/p/5576273.html 题意: 一个环是用图中所示的n个圆组成的.把自然数1.2.…….n分别放入每个圆中,并在相邻 ...
- 字典序全排列(java实现)
import java.util.Arrays; /** *字典序全排列 *字符串的全排列 *比如单词"too" 它的全排列是"oot","oto&q ...
- 面试:如何找出字符串的字典序全排列的第N种
1.题目 如何找出字符串的字典序全排列的第N种?(字符串全排列的变种) 2.思路 主要想通过这题,介绍一下康托展开式.基于康托展开式可以解决这个问题. 一般的解法:①求出所有全排列 ②按照字典序排个序 ...
- java实现全排列输出
java实现全排列输出 转自:http://easonfans.iteye.com/blog/517286 最近在找工作,面试java程序员或者软件工程师,在笔试的时候常常见到这么一道题:全排列 的输 ...
- java实现全排列
前天上午的面试遇到了一个用java实现一串数字的全排列的题,想来想去用递归最方便,可是没有在规定的时间内完成555,今天上午有空便继续写,以下是完成后的代码: import java.util.Arr ...
- java实现全排列问题
1.问题描述: 一组字符串的全排列,按照全排列的顺序输出,并且每行结尾无空格. 2.输入: 输入一个字符串 3.输入示例: 请输入全排列的字符串: abc 4.输出示例: a b c a c b b ...
- JAVA求解全排列
一,问题描述 给定一个字符串,求出该字符串的全排列. 比如:"abc"的全排列是:abc.acb.bac.bca.cab.cba 二,实现思路 采用递归的方式求解.每次先选定一个字 ...
- java字典序排序
import java.util.Comparator; import java.util.ArrayList; import java.util.Collections; public class ...
- 31. Next Permutation (java 字典序生成下一个排列)
题目: Implement next permutation, which rearranges numbers into the lexicographically next greater per ...
随机推荐
- Pyqt 获取打包二进制文件中的资源
记得有一次打开一个单独exe程序,点击btn中的一个帮助说明按钮,在同级目录下就多出一个help.chm 文件并自动打开. 那这个exe肯定是把help.chm 打包到exe中,当我触发“帮助”按钮的 ...
- SQL中exists、not exists以及in、not in的区别和使用
exists : 强调的是是否返回结果集,不要求知道返回什么, 比如: select name from student where sex = 'm' and mark exists(selec ...
- [MongoDB]Mongo基本使用:
汇总: 1. [MongoDB]安装MongoDB2. [MongoDB]Mongo基本使用:3. [MongoDB]MongoDB的优缺点及与关系型数据库的比较4. [MongoDB]MongoDB ...
- Android入门(二):Android工程目录结构
首先我们来看看Android工程的目录结构,如下图: 下面我们来看看每个文件夹都是用来做什么的? 1.src:这个不用多说,它就是保存Java源文件的目录: 2.gen:该文件夹用来保存自动生成的R. ...
- NoSQL-Redis【2】-HDEL给我的一个惊喜
用HDEL删除Hash最后一个域的时候,Redis奇迹般的帮我清除了Key,真是考虑周到啊! 127.0.0.1:6673[2]> HMSET USER:Zhangshan Name 'Zhan ...
- JS里面的两种运动函数
最新学了一个新的运动函数,与最初学习的有所不同,第一个运动是根据运动速度完成运动 ,第二个则是根据运动的时间来完成运动,而且把之前的函数都进行了一些兼容处理,在这里列出了看一下: 第一种animate ...
- Eclipse,到了说再见的时候了——Android Studio最全解析
转自:http://blog.jobbole.com/77635/ 去年的Google大会上,Google带给我们一个小玩具——Android Studio,说它是玩具,是因为它确实比较菜,界面过时, ...
- ORA-12519: TNS:no appropriate service handler found 解决(转)
可能是数据库上当前的连接数目已经超过了它能够处理的最大值. select count(*) from v$process --当前的连接数 select value from v$parameter ...
- Oracel EBS - Response
Oracle ERP Response:
- WPF中UserControl和DataTemplate
最新更新: http://denghejun.github.io 前言 前言总是留给我说一些无关主题的言论,WPF作为全新Microsoft桌面或web应用程序显示技术框架, 从08年开始,一直到现在 ...