LeetCodd——全排序(java)——回溯算法

全排列

给定一个没有重复数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]
输出:
[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]

]

思路:还是排列组合问题,用回溯法,但注意的是,遇到重复的要跳过

代码如下:

package 中级回溯;

import java.util.ArrayList;
import java.util.List;

public class 全排序 {
	
	
	public List<List<Integer>> permute(int[] nums) {
		List<List<Integer>> list = new ArrayList<>();
        List<Integer> aIntegers = new ArrayList<>();
        chuli(aIntegers, 0 , nums,list);
        return list;
    }

	private static void chuli(List<Integer> aIntegers, int n , int[] nums, List<List<Integer>> list) {
		if (n == nums.length) {
			list.add(new ArrayList<Integer>(aIntegers));
			return;
		}
		
		for (int i = 0; i < nums.length; i++) {
			if (aIntegers.contains(nums[i])) {
				continue;
			}
			aIntegers.add(nums[i]);
			chuli(aIntegers, n+1, nums, list);
			aIntegers.remove(aIntegers.size()-1);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/likunkun__/article/details/80379030