`
咖啡舞者
  • 浏览: 129231 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

给定字符的全排列输出算法[JAVA]

    博客分类:
  • JAVA
阅读更多
 

 

/*
   @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

 

如有雷同纯属巧合 - -!

 

可以思考下如果输入的字符中有相同的,那么如何避免全排列的输出出现重复?

2
1
分享到:
评论

相关推荐

    Java实现字符数组全排列的方法

    全排列是指从给定的字符数组中,按照一定的顺序生成所有可能的排列组合。这个问题通常使用回溯法来解决,因为它能够有效地避免重复的排列。下面我们将深入探讨如何使用Java实现字符数组的全排列。 首先,我们需要...

    java递归实现N个数全排列输出

    在实际应用中,全排列算法常用于解决各种问题,比如密码生成、组合优化、数据排序等。掌握这种算法可以帮助开发者更好地理解和解决复杂问题。通过这个例子,你可以看到Java是如何利用递归和回溯策略来有效地生成...

    输入一个字符串,输出所有该字符串的组合情况

    - `TestPermute.java`:可能实现了字符串的全排列算法,并命名为`permute`方法。 - `Test2.java`:可能是对另一种算法的实现,比如改进或优化过的版本。 - `Test.java`:通常用于编写单元测试,检验各种输入情况下,...

    用java语言实现数字全排列

    题目描述:给定一个数列a1,a2,a3…an,输出他所有的全排列。 算法设计描述: 1、获取当前的一种排列,用start,end分别表示该排列的列头,列尾; 2、判断start是否和end相等,若相等,执行3,否则执行4; 3、将当前...

    蓝桥杯java历年真题

    全排列算法是指将 N 个不同字符全排列的算法。例如,给定 A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA 一共 3!=3*2=6 种情况。 Java 实现全排列算法可以使用递归方法,通过将原数组分解为两个...

    生成字符串的全排列,可以用回溯法实现

    在字符串全排列问题中,我们需要找出一个给定字符集的所有可能的排列组合。例如,对于字符串 "abc",全排列包括 "abc"、"acb"、"bac"、"bca"、"cab" 和 "cba"。这个问题可以使用回溯法来解决,其基本步骤如下: 1. ...

    蓝桥杯习题125道

    本资源摘要信息涵盖蓝桥杯 Java 题解,包括字符排序算法、全排列算法和去重复元素等知识点。 字符排序算法 在计算机科学中,字符排序算法是一种基本的算法,用于对字符串中的字符进行排序。例如,给定三个不同的...

    全排列算法-递归与字典序的实现方法(Java)

    在Java中,我们可以使用递归或者字典序的方法来实现全排列算法。 首先,让我们深入理解递归方法。递归是一种解决问题的方法,它将问题分解成更小的子问题,直到子问题变得足够简单可以直接解决。在全排列问题中,...

    java 算法设计

    字符排序算法的目标是生成所有可能的字符排列组合,例如给定N个不同的字符,会产生N!(N的阶乘)种排列。 首先,我们来看第一个方法。这个方法基于递归思想实现全排列。核心函数`fullPermutation`接受两个参数,一...

    java算法题(30个)

    - 使用全排列算法生成所有可能的三位数。 11. **整数判断**: - 知识点:整数性质,数学推理。 - 遍历一定范围内的数,检查是否符合完全平方数的条件。 12. **日期计算**: - 知识点:日期处理,闰年判断。 -...

    蓝桥杯历年试题答案

    字符排序算法是计算机科学中的一种基本算法,用于将给定的字符集合进行全排列。例如,给定三个不同的字符A、B、C,则结果为ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况。 在Java语言中,可以使用递归算法来...

    JAVA经典算法32题

    7. **全排列**:程序11要求找出所有不重复的三位数,这需要用到全排列算法。可以使用回溯法或者直接生成所有可能的三位数组合。 8. **分段函数计算**:程序12涉及奖金提成计算,是一个分段线性函数。可以使用多个if...

    java实现的经典递归算法三例

    全排列问题是指给定一个字符串,求出该字符串的所有可能的排列组合。例如,对于字符串 "abc",其所有可能的排列为 "abc"、"acb"、"bac"、"bca"、"cab" 和 "cba"。 **代码分析:** ```java public class Permutation...

    java蓝桥杯历年真题及答案整理(小结)

    全排列是指给定 N 个不同字符,将这 N 个字符全排列,最终的结果将会是 N! 种。例如,给定 A、B、C 三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA,一共 3! = 3*2 = 6 种情况。 在 Java 中,可以使用...

    蓝桥杯历年真题及答案.pdf

    2. Java语言编程实践:文件中展现了使用Java语言编写的代码,包括使用Scanner类读取用户输入、使用Vector类来存储字符数据、使用嵌套循环来实现递归全排列算法。此外,还涉及到了print语句打印结果以及对计数变量...

    蓝桥杯大赛java历年真题及答案整理.docx

    #### 题目一:全排列算法实现 **背景介绍**: 蓝桥杯大赛作为一项知名的计算机类竞赛,旨在考查参赛者的编程能力和算法理解能力。其中一道经典题目是关于全排列的实现。此题要求根据给定的不同字符集合,输出所有...

    呕心沥血整理的蓝桥杯2014年以前java历年真题及答案

    给定N个不同的字符,需要计算并输出所有可能的排列组合。代码中使用了递归方法`fullPermutation`实现。它首先检查源向量`sourse`是否为空,如果为空,表示已经完成一个排列,此时输出排列并增加计数器`count`;如果...

    蓝桥杯java历年真题及答案整理(共129道题目及答案).doc

    例如,给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。如:给定A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况。 在Java中,可以使用Vector来存储字符,并使用...

    蓝桥杯历年买真题Java

    全排列算法实现 #### 知识点概述 全排列问题是指对于给定的一些元素,求出所有可能的排列方式。例如,给定`A`, `B`, `C`三个字符,其全排列结果为`ABC`, `ACB`, `BAC`, `BCA`, `CAB`, `CBA`,一共有`3! = 3 * 2 * ...

Global site tag (gtag.js) - Google Analytics