博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode-全排列
阅读量:4155 次
发布时间:2019-05-25

本文共 1695 字,大约阅读时间需要 5 分钟。

Given a collection of distinct integers, return all possible permutations.

Example:

Input: [1,2,3]

Output:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

第一种我随手写的一个深度优先的算法

public List
> permute(int[] nums) {
List
> result = new ArrayList(); DFS(result, nums, new ArrayList<>()); System.out.println(result); return result; } public void DFS(List
> result, int[] nums, List
list) { if(nums.length ==0){ result.add(list); } for (int i = 0; i < nums.length; i++) { List newList = new ArrayList(list); newList.add(nums[i]); DFS(result, removeIndex(nums,i),newList); } } public int[] removeIndex(int[] arr, int n) { int[] newArr = Arrays.copyOfRange(arr,0,arr.length); //把最后一个元素替代指定的元素 newArr[n] = newArr[newArr.length - 1]; //数组缩容 newArr = Arrays.copyOf(newArr, newArr.length - 1); return newArr; }

后面看了题解报告,发现回溯后的深度优先,可以保存中间状态并且回溯上一个状态,在空间复杂度上有很好的的提成。

这里贴了官方题解的代码

class Solution {
public void backtrack(int n, ArrayList
output, List
> res, int first) {
// 所有数都填完了 if (first == n) res.add(new ArrayList
(output)); for (int i = first; i < n; i++) {
// 动态维护数组 Collections.swap(output, first, i); // 继续递归填下一个数 backtrack(n, output, res, first + 1); // 撤销操作 Collections.swap(output, first, i); } } public List
> permute(int[] nums) { List
> res = new LinkedList(); ArrayList
output = new ArrayList
(); for (int num : nums) output.add(num); int n = nums.length; backtrack(n, output, res, 0); return res; }}

转载地址:http://dvwxi.baihongyu.com/

你可能感兴趣的文章
hadoop SecondNamenode详解
查看>>
如何将namenode与SecondaryNameNode分开配置
查看>>
Hadoop datanode添加与删除
查看>>
Hadoop Hdfs常用命令
查看>>
java 操作 hdfs
查看>>
MapReduce初级案例
查看>>
MapReduce篇之InputFormat
查看>>
js之offsetLeft属性探讨(转)
查看>>
即可编辑又可选的下拉列表框
查看>>
Apache Spark入门攻略
查看>>
spark java 编程
查看>>
Spark Standalone 原理
查看>>
Spark on YARN工作原理
查看>>
kafka集群搭建和使用Java写kafka生产者消费者
查看>>
Linux Shell编程入门
查看>>
Ubuntu 14.04安装docker
查看>>
docker registry服务端无法提供https服务 问题解决
查看>>
docker容器设置静态id启动
查看>>
不同主机间的 Docker 容器相互通信
查看>>
docker清理命令
查看>>