全排列递归实现(二)

/**
	 * @param args
	 */
	public static void main(String[] args) {
		char[] raw = "12345".toCharArray();
		perm(raw, 4);
//		System.out.println("===========================");
//		System.out.println(Arrays.toString(raw));
	}

	static void perm(char[] data, int k) {
		if (k == 0) {
			System.out.println(Arrays.toString(data));
		} else {
			for (int i = 0; i <= k; i++) {
				char t = data[i];
				data[i] = data[k];
				data[k] = t;
				perm(data, k - 1);
				t = data[i];
				data[i] = data[k];
				data[k] = t;
			}
		}
	}

全排列递归实现(二)

时间: 2024-10-08 08:16:13

全排列递归实现(二)的相关文章

Python学习笔记 之 递归、二维数组顺时针旋转90&#176;、正则表达式

递归.二维数组顺时针旋转90°.正则表达式 1.   递归算法是一种直接或间接调用自身算法的过程. 特点: 递归就是在过程或函数里调用自身 明确的递归结束条件,即递归出口 简洁,但是不提倡 递归次数多容易造成栈溢出 要求: 每次调用递归规模上有所减小 前一次为后一次做准备 规模较小时必须直接给出解答而不再进行递归调用 例子:递归实现二分法 1 def searchMyData(mydate,a1): 2 mid = int(len(mydate)/2) 3 if mid >= 1: 4 if m

全排列(递归与非递归实现)

全排列问题在公司笔试的时候很常见,这里介绍其递归与非递归实现. 递归算法 1.算法简述 简单地说:就是第一个数分别以后面的数进行交换 E.g:E = (a , b , c),则 prem(E)= a.perm(b,c)+ b.perm(a,c)+ c.perm(a,b) 然后a.perm(b,c)= ab.perm(c)+ ac.perm(b)= abc + acb.依次递归进行. void swap(string &pszStr,int k,int m) { if(k==m) return ;

全排列 递归实现

前面我们介绍了全排列的非递归算法,现在我再来写一下全排列的递归算法: 这两种算法的算法思路并不相同.递归算法的思路比较接近于我们现实生活中的思路. 1.试想,我们只有两个数字:12.要对它进行全排列,第一种方式就是12本身,第二种,将12交换,变为21即可.这提示了我们一种交换的思路. 2.但这概括的并不全面.试想,我们要对123进行全排列.我们可以采用将1固定,"23"进行全排列,将"2"固定,对"13"进行全排列.将"3"

uva 140 Bandwidth(全排列+递归)

快睡觉的时候1A的把序列全排列,递归暴力判断就ok啦,我改成对应的整数存了,a数组存的是所有的字符的排列, b数组存的是所有开始节点的排列,map[i][j]数组存的是i为起点,与j相邻 贴代码: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<limits.h> #include<math.h> #include<algorithm> using na

[LeetCode] “全排列”问题系列(二) - 基于全排列本身的问题,例题: Next Permutation , Permutation Sequence

一.开篇 既上一篇<交换法生成全排列及其应用> 后,这里讲的是基于全排列 (Permutation)本身的一些问题,包括:求下一个全排列(Next Permutation):求指定位置的全排列(Permutation Sequence):给出一个全排列,求其所在位置. 二.例题 1. 求下一个全排列,Next permuation Implement next permutation, which rearranges numbers into the lexicographically ne

第五天:C基础之递归与二维数组

写递归函数时要明确结束条件和递归体. 练习了几个递归函数: 首先是斐波那契数,前几天写过的程序,今天写的时候还是出现了问题.在判断结束条件的时候写错.写成(i==1&&i==2) 这个是有明显的逻辑错误. 1 斐波那契#include<stdio.h> 2 int fbnq(int i) 3 { 4 if(i==1) 5 return 1; 6 if(i==2) 7 return 1; 8 int ret = fbnq(i-1)+fbnq(i-2); 9 10 return r

算法设计-全排列递归

排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列: 全排列:当n==m时,称为全排列: 比如:集合{ 1,2,3}的全排列为: { 1 2 3} { 1 3 2 } { 2 1 3 } { 2 3 1 } { 3 2 1 } { 3 1 2 } 我们可以将这个排列问题画成图形表示,即排列枚举树,比如下图为{1,2,3}的排列枚举树,此树和我们这里介绍的算法完全一致: 算法思路: (1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀): (2)出口:如果只有一个

c++ n的全排列递归实现

今天学到了一个递归小例子:求n的全排列 #include<bits/stdc++.h> using namespace std; //求n的全排列 n!组数据 /* 每个全排列都有n个数,所以将求这n个数的全排列进行分解 : 1-求n-1的全排列 2-求n-2的全排列 3-求n-3的全排列 . . . n-求1的全排列 */ int n; int data[100]; //void swap(int& x,int& y){//交换两个数的值 // int temp = x; /

c语言实现按层次(广度优先)非递归遍历二叉链树

1 #include<stdio.h> 2 #include<conio.h> 4 #include<malloc.h> 5 typedef char datatype; //字符类型 内容 6 typedef struct node{ //二叉链树数据结构 7 datatype data; 8 struct node *lchild,*rchild; 9 }bitree; 10 bitree *CreatTree(){ //上一篇的建立二叉链树的函数和这里的一模一样,