[LeetCode]Permutations

题目描述

Given a collection of numbers, return all possible permutations.

For example,
[1,2,3] have the following permutations:
[1,2,3][1,3,2][2,1,3][2,3,1][3,1,2], and [3,2,1].

给出数组数字的全排列

解题思路


采用递归。

我们求整个数组的全排列,可以看成求index = 0位置的所有数字,然后对每一种情况求index=[1,num.length -  1]的子数组的全排列,然后递归求解即可。


代码


 public static List<List<Integer>> permute(int[] num) {
    	List<List<Integer>> list = new ArrayList<List<Integer>>();
    	permutation(num,0,list);
    	return list;
    }

递归求解
/**
     * 递归求解全排列
     * @param num
     * @param curIndex
     * @param pList
     */
    public static void permutation(int[] num,int curIndex,List<List<Integer>> pList){
		if(curIndex==num.length){
			//已无可交换的数字
			List<Integer> list = new ArrayList<Integer>();
			//添加的返回列表中
			for(int i = 0;i < num.length;i++){
				list.add(num[i]);
			}
			pList.add(list);
		} else {
			for(int i = curIndex;i < num.length ;i++){
				//交换当前子数组的num[curIndex]和num[i]
				int temp = num[curIndex];
				num[curIndex] = num[i];
				num[i] = temp;
				
				//[curIndex + 1, num.length - 1]的全排列
				permutation(num, curIndex+1, pList);
				
				//交换当前子数组的num[curIndex]和num[i],还原成初始状态
				temp = num[curIndex];
				num[curIndex] = num[i];
				num[i] = temp;
			}
		}
	}



你可能感兴趣的:([LeetCode]Permutations)