博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
46. Permutations
阅读量:4970 次
发布时间:2019-06-12

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

/*     * 46. Permutations      * 2016.5.5 by Mingyang 方法还是原来那个套路,还是用一个循环递归处理子问题。     * 区别是这里并不是一直往后推进的,前面的数有可能放到后面,所以我们需要维护一个visited数组来表示该元素是否已经在当前结果中,     * 因为每次我们取一个元素放入结果,然后递归剩下的元素,所以不会出现重复     * 这道题还有一个扩展就是如果元素集合中会出现重复,那么意味着我们需要跳过一些重复元素     * 1.长度标准:无     * 2.可选的范围:任何一个都可以选!没有顺序     * 3.往前走一步:在未访问某一个的前提下,直接带入     * 4.后退一步:remove     * 5.特别的case:size到了     * 6.关于重复:无     */    public List
> permute(int[] nums) { List
> res = new ArrayList
>(); boolean[] visited = new boolean[nums.length]; List
temp = new ArrayList
(); dfs3(nums, visited, temp, res); return res; } private void dfs3(int[] nums, boolean[] visited, List
temp,List
> res) { if (temp.size() == nums.length) { res.add(new ArrayList
(temp)); return; } for (int i = 0; i < nums.length; i++) { if (!visited[i]) { visited[i] = true; temp.add(nums[i]); dfs3(nums, visited, temp, res); temp.remove(temp.size() - 1); visited[i] = false; } } }

 

转载于:https://www.cnblogs.com/zmyvszk/p/5465019.html

你可能感兴趣的文章
动态方法决议 和 消息转发
查看>>
js 基础拓展
查看>>
C#生成随机数
查看>>
Android应用程序与SurfaceFlinger服务的连接过程分析
查看>>
Java回顾之多线程
查看>>
机电行业如何进行信息化建设
查看>>
9、总线
查看>>
Git 笔记 - section 1
查看>>
2018 Multi-University Training Contest 10 - Count
查看>>
HDU6203 ping ping ping
查看>>
《人人都是产品经理》书籍目录
查看>>
如何在git bash中运行mysql
查看>>
OO第三阶段总结
查看>>
构建之法阅读笔记02
查看>>
DataTable和 DataRow的 区别与联系
查看>>
检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败
查看>>
mysql数据库中数据类型
查看>>
Fireworks基本使用
查看>>
Linux 标准 I/O 库
查看>>
.net Tuple特性
查看>>