(leetcode)力扣100 55全排列

题目

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

数据范围

1 <= nums.length <= 6

-10 <= nums[i] <= 10

nums 中的所有整数 互不相同

测试用例

示例1

java 复制代码
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例2

java 复制代码
输入:nums = [0,1]
输出:[[0,1],[1,0]]

示例3

java 复制代码
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

题解(时间On*n!,空间On)

java 复制代码
class Solution {
        int len;
    public List<List<Integer>> permute(int[] nums) {
        len=nums.length;

        List<List<Integer>> res= new ArrayList<>();

        List<Integer> curr=new ArrayList<>();

        for(int i=0;i<len;i++){
            curr.add(nums[i]);
        }

        dfs(res,curr,0);

        return res;
    }


    public void dfs(List<List<Integer>> res,List<Integer> curr,int u){
        if(u==len){
            res.add(new ArrayList<Integer>(curr));
        }

        for(int i=u;i<len;i++){
            Collections.swap(curr,u,i);
            dfs(res,curr,u+1);
            Collections.swap(curr,u,i);
        }
    }
}

思路

十分简单的一种遍历方法,所以不涉及到什么思路,但是由于时间复杂度过于高实用性其实不高,代码简单记住就行。

相关推荐
Dlrb12114 小时前
C语言-指针三
c语言·算法·指针·const·命令行参数
Tisfy4 小时前
LeetCode 2540.最小公共值:双指针(O(m+n))
算法·leetcode·题解·双指针
IronMurphy4 小时前
【算法四十七】152. 乘积最大子数组
算法
淘矿人6 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
Cosolar6 小时前
万字详解:RAG 向量索引算法与向量数据库架构及实战
数据库·人工智能·算法·数据库架构·milvus
小江的记录本6 小时前
【Java基础】泛型:泛型擦除、通配符、上下界限定(附《思维导图》+《面试高频考点清单》)
java·数据结构·后端·mysql·spring·面试·职场和发展
ychqsq6 小时前
20.面试
经验分享·职场和发展
凯瑟琳.奥古斯特6 小时前
数据冗余与规范化的本质[数据库原理]
开发语言·数据库·职场和发展
落羽的落羽7 小时前
【算法札记】练习 | Week4
linux·服务器·数据结构·c++·人工智能·算法·动态规划