`
endual
  • 浏览: 3510190 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

递归 字符串的全排列

 
阅读更多
package endual;

public class AnagramApp {

	static int size ;
	static int count ;
	static char[] arrChar ;

	public static void main(String[] args) {

		String msgs = "abc" ;
		arrChar = msgs.toCharArray() ;
		size = arrChar.length ;
		count = 0 ;

		doAnagrm(size) ;
	}
	
	/**
	 * 求出一个word的全排列
	 * @param newSize
	 */
	public static void doAnagrm(int newSize) { //传入的是字符数组的长度
		
		
		if (newSize == 1) {
			return ;
		}
		
		for (int j=0; j<newSize; j++) { //对数组进行循环确保每个都能当头头轮的到
			
			doAnagrm(newSize-1) ;
			if(newSize == 2) {
			    displayWord() ;
			}
			rotate(newSize) ; //进行调换位子
		}
	}


	//循环左边所有的字符从这个位子到结束
	private static void rotate(int newSize) {
		// TODO Auto-generated method stub
		
		int j ;
		int position = size - newSize ; //总的长度 - 当前字符的长度就是当前位子
		                                //"abcde"---5个 当前位子0 -- a
		                                //"bcde" ---4个当前位子1 -- b
		char temp = arrChar[position]; //保存第一个字母
		for (j=position+1; j < size; j++) { //从当前位子的下一个位子开始
			//移动位子// 原来的是  []bcde --- []cde[空的位子]
			arrChar[j-1] = arrChar[j] ;
		}//跳出循环以后,j的大小是size的大小
		
		arrChar[size-1] = temp ; //将[空的位子] 用temp来代替了
	} // end


	//打印单词
	private static void displayWord() {
		// TODO Auto-generated method stub
		
		if(count < 99) {
			System.out.print(" ") ;
		}
		if (count < 9) {
			System.out.print(" ") ;
		}
		System.out.print(++count + " ") ;
		for (int i=0; i < size; i++) {
			System.out.println(arrChar[i]) ;
		}//打印数列		
		System.out.println("   ");
		System.out.flush() ;
		if(count%6 == 0) {
			System.out.println(" ");
		}
	}
}

 

这是递归应用的另外一种情况。
在这种情况下递归提供了一种对问题的简单简洁的解决方法。排列是指按照一定的顺序安排事物。
假设想要列出一个指定的单词的所以变位子,也就是列出该词的全排列(不管这些排列是否是真的英语单词),
他们都是由原来这个单词的字母组成的。我们称这一的工作是变位一个单词或者称为全排列一个单词。

分享到:
评论

相关推荐

    带油重复字符串全排列递归解法

    常见得全排列有三种解决方案,for循环穷举,stl摸板函数next_permutation,还有DFS深度优先搜索,当我们遇到带有重复的字符串时应该考虑除去重复的部分。

    使用C语言解决字符串全排列问题

    输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba 思路 这是典型的递归求解问题,递归算法有四个特性: 必须有可...

    Java递归实现字符串全排列与全组合

    主要为大家详细介绍了Java递归实现字符串全排列与全组合,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

    PHP实现字符串的全排列详解

    输入一个字符串,按字典序打印出该字符串中字符的所有排列。 例如,输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 思路: 1.利用递归形成递归树,达到深度优先,固定首字母的...

    数据结构-字符串.pptx

    主要内容 需要掌握的内容 字符串循环左移 LCS最长递增子序列 字符串全排列 递归、非递归 KMP Huffman编码 需要了解的内容 Manacher算法 BM算法 数据结构-字符串全文共87页,当前为第3页。 字符串循环左移 4/88 给定...

    使用swap求解不重复字符串的全排列

    为方便起见,用123来示例下。123的全排列有123、132、213、231、312、321这六种。首先考虑213和321这二个数是如何得出的。显然这二个都是123中的1与后面两数交换得到的...找到这个规律后,递归的代码就很容易写出来了:

    python求一个字符串的所有排列的实现方法

    以字符串 abc 为例介绍对字符串进行全排列的方法。 (1) 首先固定第一个字符 a,然后对后面的两个字符 b、c 进行全排列; (2) 交换第一个字符与其后面的字符,即交换 a 与 b,然后对后面的两个字符 a与c 进行全排列;...

    算法实践:全排列(递归)

    给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 输入 输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在2到8之间。 输出 输出这个字符串的所有排列方式,每行一个排列。...

    对字符串或者一串数字进行全排列

    大家都知道对一个字符串进行排列是一个NP难问题,解决起来其实非常简单,只需要进行深度递归,将后面位置的数字或字符与基位置的进行调换,再选择输出即可!

    字符串处理常见算法实现

    插入排序、一个英文句子单词逆转,字符串循环移位、去重、全排列算法(递归和非递归实现)、KMP算法

    python 数据结构 算法 LeetCode 牛客 面试 编程之美 动态规划 字典树 快速排序 树 字符串 数组 链表 全排列

    树 * 字典树 * 遍历-层次遍历 * 遍历-中序遍历-非递归 * 遍历-前序遍历-非递归 * 遍历-后序遍历-非递归 * 二叉查找树-两数之和 ...数组&字符串 查找排序 排列组合 动态规划 树 链表 数学 位运算 编程之美

    asp全排列去重复(不用hash)

    先用递归方法对字符串进行全排列后再去重复

    递归应用C语言实现

    包含多个经典的递归应用代码: 1.fibonacci.c 是斐波拉契数列递归解法 2.hanoi.c 是汉诺塔递归算法 3.permutation.c 是全排列递归算法 4.queen.c 是八皇后递归算法 ...6.strlrn.c 是求字符串长度的递归算法

    python非递归全排列实现方法

    结合数组操作,写了个非递归的全排列生成。原理是插入法,也就是在一个有n个元素的已有排列中,后加入的元素,依次在前,中,后的每一个位置插入,生成n+1个新的全排列。因为Python切割数组或者字符串,以及合并比较...

    数据结构 n个数的全排列

    如果输入123,那么就会输出123,132,213,231,312,321,依次列推

    c++递归/递推经典题目

    这里是本蒟蒻整理/写的递归...包含:过河卒、过河卒升级版、汉诺塔、级数求和、勒让德多项式、流感传染、判断回文、判断元素是否存在、平方根级数、平面分割升级版、全排列递归版、位数问题、字符串倒序输出、走楼梯。

    常见数据结构与算法C语言实现

    内容包含常见基本数据结构实现(C语言版)如各自排序、链表、栈、队列、各种树以及应用、图算法、字符串匹配算法、回溯、并查集等 以及包含各个数据结构常见算法题的解答(C语言版) bitTree 二叉搜索树 ...

    LeetCode判断字符串是否循环-Data-Structures-and-Algorithms:记录学习数据结构与算法的笔记

    LeetCode判断字符串是否循环 Data-Structures-and-Algorithms 记录学习数据结构与算法的笔记 刷题记录在leetcode目录下 链表相关题目 19: 删除链表倒数第 n 个结点 21: 合并两个有序链表 141: 判断链表中是否有环 ...

    LeetCode解题总结

    13.3 字符串的所有子回文字符串 13.4 最长公共子序列问题 13.5 字符串的编辑距离 13.6 不同路径之和 13.6.1 无障碍13.6.2 有障碍 13.7 最大矩形面积 13.8 字符串交叉组合 13.9 旋转字符串 13.10 最小路径和 13.11 ...

Global site tag (gtag.js) - Google Analytics