LeetCode:46.全排列(Java语言)

简介: LeetCode:46.全排列(Java语言)

46.全排列

给定一个 没有重复 数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]

输出:

[

[1,2,3],

[1,3,2],

[2,1,3],

[2,3,1],

[3,1,2],

[3,2,1]

]

解题思路:

ans集合存储所有结果可能

temp存储每个可能结果

vis数组存储每个位置是否被访问过

k==length说明产生了一种结果,则把这种结果加入集合中

利用深度优先遍历,将每个位置访问,形成新的结果,达到长度后,进行回溯,去放开每个位置,利用循环遍历该位置之后形成新的组合

代码:

/**
 *作者:魏宝航
 *2020年11月25日,下午14:02
 */
class Solution {
    public List<List<Integer>> ans=new ArrayList<List<Integer>>();
    public Integer[] temp;
    public boolean[] vis;
    public static int length=0;
    public List<List<Integer>> permute(int[] nums) {
        length=nums.length;
        vis=new boolean[length];
        temp=new Integer[length];
        dfs(nums,0);
        return ans;
    }
    public void dfs(int[] nums,int k){
        if(k==length){
            List<Integer> temp1=new ArrayList<>();
            temp1=Arrays.asList(temp);
            List<Integer> temp2=new ArrayList<>(temp1);
            ans.add(temp2);
            return;
        }
        for(int i=0;i<length;i++){
            if(!vis[i]){
                temp[k]=nums[i];
                vis[i]=true;
                dfs(nums,k+1);
                vis[i]=false;
            }
        }
    }
}

执行结果:


目录
相关文章
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
90 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
24天前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
4月前
|
Java Maven
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
该博客文章介绍了如何使用Java Swing中的JFrame创建一个窗体来收集用户输入的内容,并提供了详细的实现步骤和完整代码示例。
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
|
1月前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
49 4
|
2月前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
56 3
|
2月前
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
86 4
|
2月前
|
算法
Leetcode第46题(全排列)
这篇文章介绍了LeetCode第46题“全排列”的解题方法,使用深度优先搜索(DFS)和回溯算法来生成给定数组的所有可能排列。
32 0
Leetcode第46题(全排列)
|
2月前
|
存储 Java 数据安全/隐私保护
Java中的域,什么是域?计算机语言中的域是什么?(有代码实例)
文章解释了Java中域的概念,包括实例域、静态域、常量域和局部域,以及它们的特点和使用场景。
70 2
|
2月前
|
Java 数据安全/隐私保护 C++
Java语言关键字
Java语言关键字
28 2
|
2月前
|
分布式计算 安全 Java
Java语言的特点?
Java语言的特点?