/*
@author wenmin.h
*/
public class Permutation
{
public static void listAll(char[] arr_Str)
{
if(arr_Str.length<=1)
{
System.out.println(arr_Str[0]);
return;
}
doPerm(0+1,arr_Str,new char[]{arr_Str[0]});
}
/*
index:当前要进行挨个插位的字符下标
arr_All:给定的字符数组
arr_Already:当前索引前已排好的字符数组
*/
private static void doPerm(int index,char[]arr_All,char[]arr_Already)
{
if(index == arr_All.length-1)
{
for(int i = 0; i <= index; i++)
{
System.out.println(new String(insertAt(arr_Already,i,arr_All[index])));
}
}
else
{
for(int i = 0; i <= index; i++)
{
doPerm(index+1,arr_All,insertAt(arr_Already,i,arr_All[index]));
}
}
}
//指定位置插入新的字符,并将原数组中的元素往后移动
private static char[] insertAt(char[] char_Arr,int index,char c)
{
char[] tmp = new char[char_Arr.length+1];
for(int i = 0,j=0;i<tmp.length;i++,j++)
{
if(i==index)
{
tmp[index]= c;
j--;
}
else
{
tmp[i] = char_Arr[j];
}
}
return tmp;
}
public static void main(String[] args)
{
if(args.length==0)
{
System.out.println("Nothing input!");
System.exit(0);
}
char[] arr_Str = args[0].toCharArray();
listAll(arr_Str);
}
}
命令行下执行:java Permutation ab
结果:
ba
ab
如有雷同纯属巧合 - -!
可以思考下如果输入的字符中有相同的,那么如何避免全排列的输出出现重复?
分享到:
相关推荐
组合数学全排列换位算法组合数学全排列换位算法组合数学全排列换位算法组合数学全排列换位算法组合数学全排列换位算法组合数学全排列换位算法组合数学全排列换位算法组合数学全排列换位算法
给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。 J 中的字母不重复,J 和 S中的所有字符都是字母。...
统计给定文件中给定字符串的出现次数,java中的小功能
经典算法 java实现 部分代码 // 系统拥有的初始资源数 public static int AVAILABLE[] = { 10, 5, 7 }; // 系统已给每个进程分配的资源数 public static int ALLOCATION[][] = { { 0, 0, 0 }, { 0, 0, 0 }, {...
题目描述:给定一个数列a1,a2,a3…an,输出他所有的全排列。 算法设计描述: 1、获取当前的一种排列,用start,end分别表示该排列的列头,列尾; 2、判断start是否和end相等,若相等,执行3,否则执行4; 3、将当前...
统计给定字符串在文本中出现的次数,如文本内容为asd asasdfg asd as zx67 asd mklo,给定字符串为as,则函数返回6。文本内容和给定字符串由命令行输入得到。
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 输入 输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在2到8之间。 输出 输出这个字符串的所有排列方式,每行一个排列。...
设A 和B 是2 个字符串。要用最少的字符操作将字符串A 转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; ...对于给定的字符串A和字符串B,编程计算其编辑距离d(A,B)。
最后,使用printf函数将处理后的字符串输出到标准输出中。 需要注意的是,gets函数在最新的C标准中已经被弃用,建议使用fgets函数代替。同时,需要限制输入的字符串长度,以避免缓冲区溢出等安全问题。可以考虑使用...
C语言程序设计-求一个给定字符串中的字母的个数.c
3. 给定字符串A和整数n、m,求出A的第 n 个和第m个字符之间的子串并输出; 4. 给定两个字符串,判断A和B是否相等; 5. 不能利用已有的系统函数实现上述功能,比如系统提供的字符串连接函数等; 6. 系统利用C语言...
在一个字符串中查找第一个子串,并输出第一个子串的下标 如:This is a test message!为字符串 ,子串为 is 则输出为2
用可视化编程,实现分别接收输入的一行字符串,和一个字符,从字符串中删除对应的字符,然后输出结果字符串
编写程序:从键盘上输入一个包含10个字符的字符串,把该字符串与程序中给定的字符串("bacdbcabca") //依次比较,统计两个字符串对应字符相等的数目。然后输出从键盘上输入的字符串, //并把两个字符串中对应字符不...
java基础编程:统计出给定字符串的英文字母、空格、数字和其它字符的个数
要求根据给定输入,按照课堂给定的快速排序算法进行排序,输出排序结果和median3的返回值。 注:1,cutoff值为5,不足cutoff使用插入排序。 2,输入、输出格式参见测试用例0。
全排列在很多程序都有应用,是一个很常见的算法,常规的算法是一种递归的算法,这种算法的得到基于以下的分析思路。 给定一个具有n个元素的集合(n>=1),要求输出这个集合中元素的所有可能的排列。一、递归实现...
java编程统计一个字符串中的字母,数字,空格,其他,输入一个字符串,就会输出字符串中包含的字母,数字,空格,其他
Java数据挖掘18大算法实现和10大常见排序算法以及其他相关经典DM算法集合。 18大数据挖掘的经典算法以及代码实现,涉及到了决策分类,聚类,链接挖掘,关联挖掘,模式挖掘等等方面,后面都是相应算法的文章,希望能够...
嗯嗯,偶尔也要出来亮亮相的,java的新手。该资源主要是实现“编写一程序,该程序输入一个字符串参数,返回该字符串的反序字符串”。