美文网首页
0046. 全排列

0046. 全排列

作者: 蓝笔头 | 来源:发表于2021-08-22 09:12 被阅读0次

    题目地址

    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]
    ]
    

    题解

    回溯算法

    class Solution {
        public List<List<Integer>> permute(int[] nums) {
            boolean used[] = new boolean[nums.length];
            List<List<Integer>> results = new ArrayList<>();
            
            dfs(nums, results, new ArrayList<>(), used);
            
            return results;
        }
    
        public void dfs(int[] nums, List<List<Integer>> results, List<Integer> result, boolean[] used) {
            if (result.size() == nums.length) {
                results.add(new ArrayList(result));
                return;
            }
    
            for (int i = 0; i < nums.length; ++ i) {
                // 过滤已经访问过的元素
                if (used[i]) continue;
    
                // 做选择
                used[i] = true;
                result.add(nums[i]);
    
                dfs(nums, results, result, used);
    
                // 撤销选择
                used[i] = false;
                result.remove(result.size() - 1);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:0046. 全排列

          本文链接:https://www.haomeiwen.com/subject/psbabltx.html