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 ...
随机推荐
- 【MongoDB】6.关于MongoDB存储文件的 命令执行+代码执行
参考:http://www.runoob.com/mongodb/mongodb-gridfs.html 1.命令执行 MongoDB GridFS GridFS 用于存储和恢复那些超过16M(BSO ...
- MIT 6.828 JOS学习笔记6. Appendix 1: 实模式(real mode)与保护模式(protected mode)
在我们阅读boot loader代码时,遇到了两个非常重要的概念,实模式(real mode)和保护模式(protected mode). 首先我们要知道这两种模式都是CPU的工作模式,实模式是早期C ...
- ANdroid Studio查看debug SHA1
先打开 之后再命令行里输入cd.android 回车 在输入keytool -list -keystore debug.keystore 回车 之后会显示叫你输入密钥库口令: 这是你输入androi ...
- enumerate()
今天我们学一个单词 enumerate 后面加个括号 他就不是单词了,那是什么呢 来看一下 enumerate() a = ('htc', 'oppo', 'vivo', 'huawei', 'mi' ...
- spark API 介绍链接
spark API介绍: http://homepage.cs.latrobe.edu.au/zhe/ZhenHeSparkRDDAPIExamples.html#aggregateByKey
- [BZOJ4027][HEOI2015] 兔子与樱花
Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号从0到n-1,这n个分叉点由n-1个树枝连接 ...
- css 选择器优先级
优先级自上而下逐渐递减 1. 在属性后面使用 !important 会覆盖页面内任何位置定义的元素样式. 2.作为style属性写在元素内的样式 3.id选择器 4.类选择器 5.标签选择器 6.通配 ...
- marquee-:模拟弹幕
marquee:基本已被弃用!!1 可以模拟弹幕效果 1.方向:direction up right left down ...
- Multiple annotations found at this line
Multiple annotations found at this line 在使用MyEclipse的时候,通过MVN导入项目时候,webapp下面的JSP页面报了如下的错误: 这种情况通常的原因 ...
- 00 EPLAN安装问题
问题: EPLAN 安装结束后,无法创建项目,每次创建均会弹出提示框:内部错误 解决方案: 运行 Services.msc 禁用EPLAN Client Service 设置EPLAN使用管理员模式 ...