Permutations
来源:互联网 发布:鼻行动物存在吗 知乎 编辑:程序博客网 时间:2024/05/13 05:21
原题:
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], [3,2,1]]
即返回所给数列所有元素的全部排列(数组没有重复元素)
思考过程:
想到的是一个元素一个元素地添加。每次添加元素,将新元素从头到尾插到每个数组里,形成新的List<List<Integer>>。这里遇到的问题是java赋值语句,对于基本变量都是赋值,对于对象都是传递引用。每次改动数组改动数组会使数组发生变化。后来用了list.addAll()方法就好了。
解题思路:
遍历整个数组调用向结果集中添加元素的函数addElemrnts(),这个函数整理结果集,遍历当前结果集,向里面添加元素,存入结果集,也就是更新结果集。
结果代码:
public List<List<Integer>> permute(int[] nums) { List<List<Integer>> ret = new ArrayList<>(); List<Integer> list = new ArrayList<>(); list.add(nums[0]);ret.add(list);//初始化结果集 for (int i = 1;i < nums.length;i++) ret = addElemrnts(ret,nums[i]);//逐个向结果集添加元素 return ret; } public List<List<Integer>> addElemrnts(List<List<Integer>> lists,int element){//向结果集添加元素的函数 //p<List<Integer>,Integer> hasMap = new HashMap<>();//用于避免结果集出现重复结果 List<List<Integer>> ret = new ArrayList<>(); for (int i = 0;i < lists.size();i++){//遍历每个数组 for (int j = 0;j <= lists.get(i).size();j++){//向数组每个位置插入新元素,存到结果集 List<Integer> list = new ArrayList<>(); list.addAll(lists.get(i)); list.add(j,element); // (!hasMap.containsKey(list)) ret.add(list);//判断结果集是否有该数组 //sMap.put(list,1); } } return ret; }
阅读全文
0 0
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- Permutations
- CI框架 .htaccess 隐藏url在index.php解决方案
- 安装Redis常见问题
- 安卓移除/忘记已保存的WiFi密码
- Android View原理(2)-视图绘制
- 搭建maven私服(纯转载)
- Permutations
- git 工作区暂存区版本库一图详解
- 数字河
- Windows OS上安装运行Apache Kafka教程
- python 占位符(百分号方式、Format方式)
- 在windows平台工作和开发的伙伴们,发现一个很牛B的公司Sysinternals,提供的一些工具大家可以看看是否可以用
- 循环中超时的strlen
- 如何往oracle批量插入多条数据
- 嵌入式C语言经验记录