用递归对数组进行全排列

来源:互联网 发布:ubuntu uefi 安装 编辑:程序博客网 时间:2024/05/18 03:49
public class AllPaiLie {    public static void main(String[] args) {        char[] c = {'a', 'b', 'c', 'd', 'e'};        char[] tmp = new char[c.length];//临时数组,用于存放全排列的每一种可能        int[] flag = new int[c.length];//标记数组,0代表该值没用过,1代表已用过        pailie(c, flag, tmp, 0);    }    /**     * @param c 待全排列的字符数组     * @param flag 标记数组,0代表该值没用过,1代表已用过     * @param tmp 临时数组,用于存放全排列的每一种可能     * @param j 临时数组的下标,同时也表示当前是第几层     */    public static void pailie(char[] c, int[] flag, char[] tmp, int j) {          for (int i = 0; i < c.length; i++) {                if (flag[i] == 1) { //已用过则继续找下一个                    continue;                }                flag[i] = 1;//标记为已用过                tmp[j] = c[i];//将当前值放在临时数组中,下标为当前所在的层数                if (j == c.length - 1) {//到最后一层了就直接输出并返回到上一层                    System.out.println(tmp);                    return ;                }                pailie(c, flag.clone(), tmp, j + 1);                flag[i] = 0;//用完之后恢复到未用状态,以便让下一层用        }    }}

0 0
原创粉丝点击