1. 程式人生 > 其它 >刷題-Leetcode-46. 全排列(回溯、遞迴)

刷題-Leetcode-46. 全排列(回溯、遞迴)

技術標籤:刷題leetcodejava

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