ブラッシングの質問-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