46.Permutations leetcode java
来源:互联网 发布:如何查网络摄像头 编辑:程序博客网 时间:2024/05/17 00:56
题目:
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]]
思路:
这道题是找所有的全排列,典型的排列组合模板,用dfs,因为nums里的数不重复,所以相对容易,下面程序中helper的作用是寻找所有以permute开头的全排列。
class Solution { public List<List<Integer>> permute(int[] nums) { List<List<Integer>> res=new ArrayList<List<Integer>>(); List<Integer> permute=new ArrayList<Integer>(); Set<Integer> set=new HashSet<>(); if(nums==null) return res; Arrays.sort(nums); helper(res,permute,nums,set); return res; } public void helper(List<List<Integer>> res,List<Integer> permute,int[] nums,Set<Integer> set){ if(permute.size()==nums.length) res.add(new ArrayList<Integer>(permute)); for(int i=0;i<nums.length;i++){ if(!set.contains(nums[i])){ set.add(nums[i]); permute.add(nums[i]); helper(res,permute,nums,set); set.remove(nums[i]); permute.remove(permute.size()-1); } } }}
下面这么写也可以:
for(int i=0;i<nums.length;i++){ if(set.contains(nums[i])){ continue;//跳过本次循环进行下次循环,而break是直接跳出循环 } set.add(nums[i]); permute.add(nums[i]); helper(res,permute,nums,set); set.remove(nums[i]); permute.remove(permute.size()-1); }
for循环一开始写成下面这样,是不对的:
for(int i=0;i<nums.length;i++){ if(!set.contains(nums[i])){ set.add(nums[i]); permute.add(nums[i]); } helper(res,permute,nums,set); set.remove(nums[i]); permute.remove(permute.size()-1); }
另外,set因为是无序的,remove(某个对象) 而list的remove方法是remove(对象的索引)
阅读全文
0 0
- (Java)LeetCode-46. Permutations
- [LeetCode-Java]46. Permutations
- 46.Permutations leetcode java
- [leetcode]46. Permutations@Java解题报告
- [Leetcode] Permutations (Java)w
- [Leetcode] Permutations II (Java)
- [LeetCode][Java] Permutations
- [LeetCode][Java] Permutations II
- [leetcode-46]Permutations(java)
- [LeetCode]46.Permutations
- LeetCode 46.Permutations
- 46. Permutations Leetcode Python
- LeetCode --- 46. Permutations
- [Leetcode] 46. Permutations
- [leetcode] 46.Permutations
- LeetCode 46. Permutations DFS
- 46. Permutations LeetCode
- Leetcode 46. Permutations
- Analyzing an exploit for СVE-2017-11826
- python numpy包基础(1)
- HDU 5701 中位数计数(思维,区间)好题
- Nginx与Tomcat 实现负载均衡
- java分割超大文本文件
- 46.Permutations leetcode java
- 编程作业(三)
- 15算法课程 171. Excel Sheet Column Number
- 海康威视web插件
- ExpressRoute 连接模型
- 2017.11.10第八课
- (sklearn)逻辑回归linear_model.LogisticRegression用法
- adb shell sqlite3 简单使用
- 规则引擎在数据分析中的作用