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);
}
}
}
}