刷題-Leetcode-46. 全排列(回溯、遞迴)
阿新 • • 發佈:2021-02-01
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);
}
}
}
}