LeetCode刷题记录(3)

LeetCode刷题记录
------分割线------
刷题记录3: 46.全排列


文章目录

  • 前言
  • 一、题目内容
  • 二、自己的思路
  • 三、自己的代码实现
  • 四、精选代码
  • 总结


前言

想到什么写什么:

继续保持吧。


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目内容

LeetCode刷题记录(3)_第1张图片

二、自己的思路

	依旧是递归回溯,就是将其全部遍历一遍,吸取上次做题的经验,这次用Deque存储数据,减少了空间复杂度,另外一个Set记录每次存储的数据,进行排重,当全部数据都放入list中后,再将最后添加的数据踢出,再循环塞入。

三、自己的代码实现

class Solution {
public List> permute(int[] nums) {
    List> list = new ArrayList<>();
    int length = nums.length;
    for(int i=0;i dq = new ArrayDeque<>();
        Set set = new HashSet();
        set.add(nums[i]);
        dq.add(nums[i]);
        dps(list,nums,set,dq);
    }
    return list;
}

public void dps(List> list,int[] nums,Set set,Deque dq){
    if(dq.size()==nums.length){
        list.add(new ArrayList<>(dq));
        return;
    }
    
    for(int i=0;i

四、精选代码

(摘取自力扣题解精选,详细地址见代码下方)

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

public class Solution {

public List> permute(int[] nums) {
    int len = nums.length;
    // 使用一个动态数组保存所有可能的全排列
    List> res = new ArrayList<>();
    if (len == 0) {
        return res;
    }

    boolean[] used = new boolean[len];
    Deque path = new ArrayDeque<>(len);

    dfs(nums, len, 0, path, used, res);
    return res;
}

private void dfs(int[] nums, int len, int depth,
                 Deque path, boolean[] used,
                 List> res) {
    if (depth == len) {
        res.add(new ArrayList<>(path));
        return;
    }

    for (int i = 0; i < len; i++) {
        if (!used[i]) {
            path.addLast(nums[i]);
            used[i] = true;

            System.out.println("  递归之前 => " + path);
            dfs(nums, len, depth + 1, path, used, res);

            used[i] = false;
            path.removeLast();
            System.out.println("递归之后 => " + path);
        }
    }
}

public static void main(String[] args) {
    int[] nums = {1, 2, 3};
    Solution solution = new Solution();
    List> lists = solution.permute(nums);
    System.out.println(lists);
}
}

作者:liweiwei1419
**链接:https://leetcode.cn/problems/permutations/**
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

代码就随便贴一下,如果要看还是从**上面这个地址**进去看解法,这个答主对深度优先遍历与回溯算法做了很详细的介绍,学东西还是主要掌握其中的思维,不是单单是一道题的解法,万变不离其宗,举一反三的能力很重要。
LeetCode刷题记录(3)_第2张图片

总结

做这道题想到了一位死党,同时也是我高中同学,当初竞赛的时候别人是省第二名,参加了全国冬令营,拿了银牌的第一名,是真的叼,他做数学题其中举一反三的能力特别强,现在也是腾讯、华为、字节都呆过,屌的,李规。咱们只能勤能补拙了,加油!

你可能感兴趣的:(leetcode,算法,职场和发展)