Leetcode Permutation2
来源:互联网 发布:360网络认证 编辑:程序博客网 时间:2024/06/05 08:09
这里我用了递归解法。关键在于如何去重,而去重的关键在于同样的数字,在新的排列中,序号必须总是升序(或者总是降序)。
比如1,1,3
两个1的序号是0,1.
如果是升序的话,只能是1,1,3(序号是0,1,2),不能是1,1,3(序号1,0,2)。
然后在实际编程中,没有必要排序或者用一个数组来记录序号,只是在插入数值num[i]到位置j时候,发现j前面已经有num[i]了,那么就抛弃这个序列,因为j前面有同样数值的话,它的序号肯定是大于i的。
import java.util.*;public class Solution { public List<List<Integer>> permuteUnique(int[] num) { List<List<Integer>> permutes = new ArrayList<List<Integer>>(); if(num.length == 0) return permutes; else if(num.length == 1) { permutes.add(new ArrayList<Integer>()); permutes.get(0).add(num[0]); return permutes; } List<List<Integer>> prepermutes = permuteUnique(Arrays.copyOfRange(num, 1,num.length)); for(int i=0;i<num.length;i++) { for(List<Integer> pp : prepermutes) { List<Integer> p = new ArrayList<Integer>(); boolean flag = false; for(int j=0;j<i;j++) { if(pp.get(j) == num[0]) { flag = true; break; } p.add(pp.get(j)); } if(flag == true) continue; p.add(num[0]); for(int j=i;j<num.length-1;j++) p.add(pp.get(j)); permutes.add(p); } } return permutes; }}
0 0
- Leetcode Permutation2
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- JTree实现文件树——使用系统图标
- 第13周项目5.1.3 统计每一个数字字符出现的次数
- 在安装matlab时双击setup后闪退的问题
- USACO 刷水记录
- UIControl详解
- Leetcode Permutation2
- 第13周项目5字符串统计
- 小编程题之绝对和最小
- 第十三周项目六(1)从文件中读入数据
- 第十三周项目五—字符串操作
- object-c编程tips-KVO,KVC浅析
- Testin云测率先全面支持Android 5.0手游云测试
- 第十三周项目1(1)数据大折腾
- (8)十的替代品