博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Permutations I & II leetcode
阅读量:6937 次
发布时间:2019-06-27

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

Permutations I

Given a collection of distinct numbers, return all possible

permutations.

For example, [1,2,3] have the following permutations: [1,2,3],

[1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].

回溯法

思路

与subset不同的是对于数组[1,2,3] [2,1,3]和[2,3,1]等都算在排列里, 所以我们递归的的起始点不再是i+1, 而是每次都从0 开始.

但是由于每次都从0开始就没法知道是否要访问的下一个数之前有没有被用过, 所以这里用一个Boolean数组来存储每一个点的访问情况

复杂度

时间O(n!) 空间栈 O(n!)

代码

public List
> permute(int[] nums) { List
> res= new ArrayList
>(); if (nums == null || nums.length == 0) { return res; } List
tem = new ArrayList
(); Arrays.sort(nums); boolean[] visit = new boolean[nums.length]; helper(nums, visit, res, tem); return res;}public void helper(int[] nums, boolean[] visit, List
> res, List
tem) { if (tem.size() == nums.length) { res.add(new ArrayList
(tem)); return; } for (int i = 0; i < nums.length; i++) { if (visit[i] == true) { continue; } visit[i] = true; tem.add(nums[i]); helper(nums, visit, res, tem); tem.remove(tem.size() - 1); visit[i] = false; }}

Permutations II

Given a collection of numbers that might contain duplicates, return

all possible unique permutations.

For example, [1,1,2] have the following unique permutations: [1,1,2],

[1,2,1], and [2,1,1].

回溯法

思路

与I不同的是这里允许了重复的元素 ,所以如果当前访问元素与之前元素相同而之前的元素没有访问过 说明相似的情况已经出现过 要避免再出现

复杂度

时间O(n!) 空间栈 O(n!)

代码

public List
> permuteUnique(int[] nums) { List
> res= new ArrayList
>(); if (nums == null || nums.length == 0) { return res; } List
tem = new ArrayList
(); Arrays.sort(nums); boolean[] visit = new boolean[nums.length]; helper(nums, visit, res, tem); return res;}public void helper(int[] nums, boolean[] visit, List
> res, List
tem) { if (tem.size() == nums.length) { res.add(new ArrayList
(tem)); return; } for (int i = 0; i < nums.length; i++) { if (visit[i] == true) { continue; } if (i != 0 && nums[i] == nums[i - 1] && !visit[i - 1]) { continue; } visit[i] = true; tem.add(nums[i]); helper(nums, visit, res, tem); tem.remove(tem.size() - 1); visit[i] = false; } }

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

你可能感兴趣的文章
python写入和读取csv文件
查看>>
如何配置tomcat群集节点之间简单进行会话共享?
查看>>
Confluence 6 整合到支持的附件存储选项
查看>>
Confluence 6 通过 SSL 或 HTTPS 运行 - 修改你 server.xml 文件
查看>>
快速构建Windows 8风格应用9-竖直视图
查看>>
解决微信小程序前台获取不到后台数据
查看>>
Chrome浏览器设置不缓存
查看>>
centos5.5 samba-swat总结
查看>>
YII2出现SQLSTATE[HY000] [2002] No such file or director
查看>>
搭建nginx+3*tomcat环境 实现session共享
查看>>
Phone状态监听
查看>>
MongoDB安装和基本运用
查看>>
python获取系统状态psutil模块
查看>>
软件分发、补丁推送排错
查看>>
如何把VHD转换成VHDX
查看>>
毕业只是开始:你准备好了吗?
查看>>
交互式自动化脚本模板
查看>>
顺丰和菜鸟对用户数据寸土不让 战争平息需监管层
查看>>
fatal error: libavutil/avconfig.h: No such file...
查看>>
spring集成activemq
查看>>