`
442136713
  • 浏览: 51710 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java 字符串的全排列输出

阅读更多
public class MyTestGameCore { 
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 = index; i >= 0; i--) { 
System.out.println(new String(insertAt(arr_Already, i, 
arr_All[index]))); 
} 

} else { 
for (int i = index; i >= 0; 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) throws IOException { 
System.out.println("Please input a String!"); 
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
String str = br.readLine(); 

char[] arr_Str = str.toCharArray(); 
listAll(arr_Str); 

} 
} 
 

通过改变字符的插入位置,使用递归来实现全排列.

下面的代码是采用Set实现的全排列去重,原理与上面一样:

	public static Set<String> list(String str) {
		char[] array_all = str.toCharArray();
		if (array_all.length == 1) {
			System.out.println(array_all[0]);
			return null;
		}
		Set<String> set = new HashSet<String>();
		set = go(array_all, new char[] { array_all[0] }, 1);
		return set;
	}

	public static Set<String> go(char[] all, char[] already, int index) {
		Set<String> set = new HashSet<String>();
		if (index == all.length - 1) {
			for (int i = index; i >= 0; i--) {
				set.add(new String(insertINDEX(already,all[index],i)));
			}
		} else {
			for(int i = index; i >= 0; i--){
				set.addAll(go(all,insertINDEX(already,all[index],i),index+1));
			}
		}
		return set;
	}

	public static char[] insertINDEX(char[] already, char a, int index) {
		char[] temp = new char[already.length + 1];
		for (int i = 0 ,j= 0; i < temp.length;j++, i++) {
			if (i == index) {
				temp[i] = a;
				j = j - 1;
			} else {
				temp[i] = already[j];
			}
		}
		return temp;
	}
	
	public static void main(String [] args) throws IOException{
		System.out.println("Input A String!");
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		Set<String> set = new HashSet<String>();
		set = list(str);
		Iterator it = set.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}

 

分享到:
评论
1 楼 longkeyy 2012-12-01  
如果这是全排列,那全组合是啥样?

相关推荐

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

    下面我们将深入探讨如何使用Java实现字符数组的全排列。 首先,我们需要了解回溯法。回溯法是一种试探性的解决问题方法,它尝试逐步找到问题的所有解。当发现某一步无法继续找到有效解时,会退回一步,尝试其他的...

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

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

    java实现字符串的全排列

    "java实现字符串的全排列" java实现字符串的全排列是指通过编程语言java来生成一个字符串的所有可能排列。例如输入字符串abc,则输出所有可能的排列组合:abc,acb,bac,bca,cab和cba。 在java中,实现字符串的...

    输出n个字符的全排列(没有重复字符)

    简单的实现,代码很短。...输入一个字符串,输出它的字符的所有组合的情况 如输入“abc”,则输出abc,acb,bac,bca,cab,cba。 但如果输入“aba”,即有重复的,也会输出aba,aab,baa,baa,aba,aab。

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

    在编程领域,全排列是一个经典的算法问题,它涉及到数组或字符串的所有可能的顺序组合。当给定一个包含N个不同元素的集合时,全排列就是要列出所有可能的N!(N的阶乘)种排列方式。在这个场景中,我们将探讨如何使用...

    java算法,经典面试必备

    1. 字符串全排列: 在提供的代码中,可以看到两种实现字符串全排列的方法。它们都是通过递归的方式来生成所有可能的字符组合。核心逻辑是遍历基础字符串(base),在每次迭代中删除一个字符,并将这个字符添加到...

    重复元素全排列

    - 接下来,程序读取`input.txt`文件中的数据,对字符串进行全排列操作,并将结果输出。 2. **全排列函数`perm()`**: - 这个函数接受三个参数:一个字符数组`list[]`,以及两个整数`k`和`m`。`k`代表当前处理的...

    精心搜集整理:2014年前蓝桥杯Java竞赛历年试题及详尽答案

    此题不仅考验对字符串及字符数组的操作熟练度,还加深了对Java中字符串处理函数应用的理解。 通过深入解析这些精选题目,学习者不仅能够掌握Java递归、字符串操作、字符数组运用等核心技能,还能熟悉面向对象编程的

    java面试题目

    3. **全排列问题**:对于字符串数组的全排列,可以采用回溯算法或者动态规划来解决,涉及到数组操作和递归。 4. **JavaScript编程**:在浏览器中显示当前星期,可以用JavaScript的Date对象获取日期,然后处理输出。...

    java代码-列出所有字符串中大小写的组合

    在Java编程中,有时我们需要处理字符串的大小写组合问题,特别是在进行全排列或者组合搜索时。这个场景描述的代码示例就是解决此类问题的一个实例。...理解并掌握这种技巧可以帮助开发者解决涉及字符串全排列的问题。

    浦发银行机考历年真题(3).pdf

    根据提供的文件信息,可以...这些知识点涉及编程基础、数据结构、算法设计、字符串处理以及日期时间处理等多方面内容,对于从事Java后端开发的人员来说,掌握这些知识点对于提升编程能力、解决实际问题有着重要的意义。

    字典排序求全排列的算法

    字典排序,也称为字典序,是一种特殊的排序方式,特别是在字符串中应用广泛。它将字符串按照字典的顺序排列,即按照字符的Unicode值进行升序排序。在处理全排列问题时,字典排序可以帮助我们系统地生成所有可能的...

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

    字符串操作在编程中相当普遍,尤其是在需要动态构建字符串或进行大量字符串操作时,使用`StringBuffer`比使用普通的字符串连接(如`+`)要高效得多。 6. 设计模式的应用 虽然代码片段中没有直接提到设计模式,但是...

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

    通过这两个问题,我们可以学习到Java中的递归算法、字符串处理、字符数组的操作、以及面向对象编程的基本概念。对于准备蓝桥杯或其他编程竞赛的学生来说,掌握这些基础知识至关重要。同时,通过实践这些真题,可以...

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

    该题考察了字符串处理的基本技巧,涉及到字符串的分割、大小写转换以及特殊字符的插入等操作。 **知识点解析**: 1. **需求分析**:题目要求对输入的字符串进行以下处理: - 将每个单词的首字母转换成大写。 - ...

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

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

    蓝桥杯java历年真题及答案

    4. 字符串处理:内容中有关于字符串去重的逻辑,如`removeDuplicate`方法的定义,以及字符串到字符集合的转换方法`convert`。 5. 循环和条件控制语句:通过for循环和if条件语句进行逻辑判断和重复执行代码块,如`...

    蓝桥杯java历年真题及答案整理

    ### 蓝桥杯Java历年真题解析及答案整理 #### 题目一:全排列问题 ...这些题目涵盖了基本的数据结构操作、递归算法应用以及字符串处理等重要内容,对于提高参赛者的编程能力和解决问题的能力非常有帮助。

    整理的java工具类

    2. **字符串工具**:可能有处理字符串的类,如格式化输出、字符串分割、去除空白字符、替换子串等功能。 3. **日期时间**:可能包含处理日期和时间的工具类,如时间格式化、日期比较、时间差计算等。 4. **IO操作**...

    蓝桥杯大题总结(历届比赛共40多大题) java 版

    ### 蓝桥杯大题总结之Java版详解 #### 一、全排列问题解析 ...以上两个问题展示了在Java编程中处理全排列以及字符串操作的一些常见技巧和方法。这些练习有助于加深对递归、字符串处理、正则表达式的理解和应用。

Global site tag (gtag.js) - Google Analytics