JAVA算法实现全排列

简介

全排列:给n个不重复的各位数字求这n个数字组成的所有组合

代码

该案例统计 0-9 组成的十位数有多少个(包括0开头)

public class B6_方格填数 {
     
// sum 的值为数有多少个
	static int sum = 0;
	static int [] a = {
     0,1,2,3,4,5,6,7,8,9};
	// 将数组中的值从头到尾输出
	public static void getNum() {
     
		for(int i=0;i<a.length;i++){
     
			System.out.print(a[i]);
		}
		System.out.println();
	}
	// k 代表第几次循环,从0开始
	public static void f(int k) {
     
		if(k==10) {
     
			check();
			sum++;
			return;
		}
		// for 循环内为核心代码
		/*
			1.采用递归回溯的方法得到值
		*/
		for (int i = k; i < a.length; ++i) {
     
		/*
			 下面域内将数组 a 的第k位与t位进行交换
			 如果是第一次进入 f() 方法那么for循环的含义代表
			 循环 10 次。而 k = 0 ,代表进行 10 次for 循环,
			 分别将 a[k=0] 与 a[] 数组的所有位数替换,
			 即分布十位数的首位的所有可能 
		*/
			{
     
				int t = a[i];
				a[i] = a[k]; 
				a[k] = t;
			}
		/*
			将 k+1 传入下一次回溯,
			即进行 第二位,第三位,第四位的所有可能
		*/
			f(k+1);
		/*
			每确定完一个位数的一种可能后将之前替换值的两个位数复原
		*/
			{
     
				int t = a[i];
				a[i] = a[k]; 
				a[k] = t;
			}
		}
	}
	public static void main(String[] args) {
     
		f(0);
		System.out.println(sum);
	}
}

你可能感兴趣的:(算法,java,算法,递归法)