按照字典排序,生成1-n队列(java实现)

按照字典排序,就是按照从小大排序,包括序号中的每一个数字。

例如输入3,字典排序就是

1,2,3,
1,3,2,
2,1,3,
2,3,1,
3,1,2,
3,2,1,

对于1,2,3和1,3,2来说,显然除了第一个是1外,1后面也按照字典排序。

于是题目就是:输入一个n(1-9),生成最大数为n的字典排序


思路:从题目分析可以看出,应该使用递归的方法。假设我们已经确定了前k个数字,后面的数字也是要按字典排序,将前k个数字,与后面数字的字典排序结合起来,就可以得出结果。按照递归的思路,我们假设我们已经拥有了一个print_permutation(int n,int[] a,int cur)方法,这个方法第一个参数是我们输入的n,第二个参数是已经按照字典排序拍好的cur个数字,cur就是a里面有多少个数字已经按字典排序拍好


假设n=9,那么我们拿着这个方法,我确定第一位,是从1到9,然后可以调用print_permutation(8,arr,0),就可以生产后面八位。

那么要几时print_permutation(8,arr,0),也就是n=8,我们同样确定第一位(注意,这里的第一位不能等于n=9时确定的第一位,所以程序里面加了加个判断),然后调用

print_permutation(7,arr,0)

以此类推,我们最后调用print_permutation(1,arr,0)就可以结束递归


public class Test {
	public static void print_permutation(int n,int[] a,int cur){
		if(cur == n){//如果当前数目为总数,输出
			for(int i=1;i


你可能感兴趣的:(java,算法与数据结构)