46. 全排列(回溯)

同样是回溯算法,相比于前两道题
77. 组合(回溯)
17. 电话号码的字母组合(回溯)
这道题中,对于回溯遍历的内容可以使用一个boolean数组来进行标记判断

class Solution {
   
    public List<List<Integer>> permute(int[] nums) {
   
        List<List<Integer>> ans = new ArrayList<>();
        int n = nums.length;
        boolean[] visited = new boolean[n]; 
        dfs(nums, n, visited, ans, new ArrayList<>());
        return ans;
    }
    public void dfs(int[] nums, int n, boolean[] visited, List<List<Integer>> ans, List<Integer> list) {
   
        if (list.size() == n) ans.add(new ArrayList<>(list));
        else {
   
            for (int i = 0; i < n; ++i) {
   
                if (!visited[i]) {
   
                    int cur = nums[i];
                    list.add(cur);
                    visited[i] = true;
                    dfs(nums, n, visited, ans, list);
                    visited[i] = false;
                    list.remove(list.size() - 1);
                } 
            }
        }
    }
}

特别注意:

  1. if条件判断的位置

    for (int i = 0; i < n; ++i) {
         
    	if (!visited[i]) {
         
    

    不要写成

    for (int i = 0; i < n && !visited[i]; ++i) {
         
    

    会出错,但不明白为什么。

  2. 深度优先搜索时,回溯重置操作中去除的元素应该是list列表的最后一个元素,而不是n-1

    list.remove(list.size() - 1);
    

    而不是

    list.remove(n - 1);
    

相关推荐

  1. 46. 排列回溯

    2024-01-12 23:12:03       55 阅读
  2. 回溯】Leetcode 46. 排列【中等】

    2024-01-12 23:12:03       47 阅读
  3. 46. 排列

    2024-01-12 23:12:03       43 阅读
  4. LeetCode 46 排列

    2024-01-12 23:12:03       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-12 23:12:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-12 23:12:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-12 23:12:03       82 阅读
  4. Python语言-面向对象

    2024-01-12 23:12:03       91 阅读

热门阅读

  1. 运筹学视角下的市场机制设计

    2024-01-12 23:12:03       47 阅读
  2. 【uniapp-小程序-分享图5/4】

    2024-01-12 23:12:03       56 阅读
  3. 第六章 : Spring cloud 配置中心 -Nacos

    2024-01-12 23:12:03       52 阅读
  4. 解密Go语言结构体:构建数据之美

    2024-01-12 23:12:03       64 阅读
  5. Android13配置selinux让system应用可读sys,proc,SN号

    2024-01-12 23:12:03       56 阅读
  6. 开发总结相关

    2024-01-12 23:12:03       60 阅读
  7. 网络常用命令

    2024-01-12 23:12:03       44 阅读