47. Permutations II
来源:互联网 发布:零件报价软件 编辑:程序博客网 时间:2024/05/21 06:37
求当前排列的下一个排列的方法在我之前的博客中,排列是有序的
http://blog.csdn.net/github_31804537/article/details/52848094
而这个是不停的找下一个排列,直到和第一个重复,就说明依旧全部遍历了
public class Solution { public List<List<Integer>> permuteUnique(int[] nums) { Set set = new HashSet<List<Integer>>();//不用set也行,list也有contains()方法,但set速度快了list很多,这道题用set,22ms,不用set,57ms List<Integer>list = new ArrayList<>(); List<List<Integer>>ll = new ArrayList<>(); Arrays.sort(nums); adc(list,nums); set.add(list); for(int i =0;;i++){ list= new ArrayList<>(); nextPermutation(nums); adc(list,nums); if(set.contains(list))break; set.add(list); } ll.addAll(set); return ll; } private void adc(List<Integer>list,int[] nums){//普通的把数组放入list中 for(int i=0;i<nums.length;i++) list.add(nums[i]); } //从这开始就是找下一个排序 private void nextPermutation(int[] nums) { if(nums.length<=1)return; int i = nums.length-1; for(;i>=1;i--){ if(nums[i-1]<nums[i]) break; } int first = i-1; int second = i; if(i!=0){ int j =nums.length-1; for(;j>i-1;j--){ if(nums[j]>nums[first])break; } swap(nums,first,j); } reverse(nums,second,nums.length-1); } private void swap(int[]nums,int i,int j){ int t = nums[i]; nums[i] = nums[j]; nums[j] = t; } private void reverse(int []nums,int start,int end){ int i=start; int j=end; while(i<j){ swap(nums,i,j); i++; j--; } }}
0 0
- 46. Permutations && 47. Permutations II
- 46. Permutations, 47. Permutations II
- [LeetCode]47.Permutations II
- LeetCode 47.Permutations II
- LeetCode --- 47. Permutations II
- [Leetcode] 47. Permutations II
- [leetcode] 47.Permutations II
- 47.Permutations II
- 47. Permutations II
- LeetCode 47. Permutations II
- 47. Permutations II
- 47. Permutations II LeetCode
- 47. Permutations II
- 47. Permutations II
- 47. Permutations II
- 47. Permutations II
- Leetcode 47. Permutations II
- 47. Permutations II
- 被说了很多遍的设计模式---代理模式
- 整理一下HIVE概念
- 搭建Nagios监控环境遇到的几个问题
- 你应当如何学习C++(以及编程)(rev#1)
- mysql 触发器简单使用
- 47. Permutations II
- OptiX OSN1500设备的ATM业务保护
- 整合Hibernate时Annotation的配置
- 利用map和cod文件定位崩溃位置的例子和习题
- jenkins源码管理之git
- 105-StringBuilder的更多方法
- 微博取消分享界面后界面无法交互
- iPad 手指触摸与PC鼠标事件
- 浏览器停止加载页面内容