回溯法求全排列

2019/09/18 Algorithm

problem

输入一个集合,输出这个集合的全排列。

solution

回溯法

Java code


public class Permutation {

	public static List<List<Integer>> permute(int[] nums) {
		
		List<Integer> visited = new ArrayList<Integer>();
		List<List<Integer>> res = new LinkedList<>();
		backtrack(nums,visited,res);
		return res;
		
	}
	
	private static void backtrack(int[] nums, List<Integer> visited,List<List<Integer>> res) {
		
		if (visited.size() == nums.length) {  // 结束条件
			res.add(new LinkedList<Integer>(visited));
			return;
		}
		
		for (int i = 0; i < nums.length; i++) { // 选择列表
			if (visited.contains(nums[i])) {
				continue;
			}
			visited.add(nums[i]); // 做选择
			backtrack(nums, visited, res);  // 下一层决策
			visited.remove(visited.size()-1); // 取消选择	
		}
	}
}

/*
output:
*/

Search

    Post Directory