刷题-Leetcode-46. 全排列(回溯、递归)

46. 全排列

题目链接

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations/

题目描述

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

示例:

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

题目分析

    回溯法
    找到所有可能-递归
    剪枝条件 组合长度为3
class Solution {
    
    
    public List<List<Integer>> permute(int[] nums) {
    
    
        List<List<Integer>> result = new ArrayList<>();
        HashMap<Integer,Boolean> visited = new HashMap<>();
        for(int num:nums){
    
    
            visited.put(num,false);
        }
        back(result, nums, visited,new ArrayList<>());

        return result;
    }
    public void back(List<List<Integer>> result, int []nums, HashMap<Integer,Boolean> visited, ArrayList<Integer> list){
    
    
        if(list.size() == nums.length){
    
    
            result.add(new ArrayList<>(list));//要复制 避免引用传递
            System.out.println("result= "+result);
            return;
        }
        for(int num:nums){
    
    
            if(!visited.get(num)){
    
    //不在 false的时候
                list.add(num);
                System.out.println("list= "+list);
                visited.put(num,true);
                back(result,nums,visited,list);
                visited.put(num,false);
                list.remove(list.size()-1);
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42771487/article/details/113471006