leedcode做题总结, 题目Permutations I/II46/47
2015-01-08 09:59
375 查看
这两道题是生成一串数字的所有可能排列,方法都是回溯法。第二题需要判断重复,这里使用一个Set来储存已经生成的字符串来进行判断重复。
public class Solution { private void generate( LinkedList<Integer> l, LinkedList<Integer> numl, LinkedList<List<Integer>> res){ if(numl.size()==0){ res.add(new LinkedList<Integer>(l)); }else{ for(int i=0;i<numl.size();i++){ int tmp = numl.remove(i); l.add(tmp); generate(l,numl,res); l.remove(l.size()-1); numl.add(i,tmp); } } } public List<List<Integer>> permute(int[] num) { LinkedList<List<Integer>> res = new LinkedList<List<Integer>>(); if( num.length==0) return res; LinkedList<Integer> numl = new LinkedList<Integer> (); for(int i=0;i<num.length;i++){ numl.add(num[i]); } //HashSet<String> s = new HashSet<String>(); LinkedList<Integer> l = new LinkedList<Integer>(); generate(l,numl,res); return res; } }
public class Solution { private void generate(String current, LinkedList<Integer> l, HashSet<String> s, LinkedList<Integer> numl, LinkedList<List<Integer>> res){ if(numl.size()==0){ if(!s.contains(current)){ s.add(current); res.add(new LinkedList<Integer>(l)); } }else{ for(int i=0;i<numl.size();i++){ if(i==0||i!=0&&numl.get(i)!=numl.get(i-1)){ int tmp = numl.remove(i); String tmpstring = current; tmpstring=tmpstring+tmp; l.add(tmp); generate(tmpstring,l,s,numl,res); l.remove(l.size()-1); numl.add(i,tmp); } } } } public List<List<Integer>> permuteUnique(int[] num) { LinkedList<List<Integer>> res = new LinkedList<List<Integer>>(); if( num.length==0) return res; Arrays.sort(num); LinkedList<Integer> numl = new LinkedList<Integer> (); for(int i=0;i<num.length;i++){ numl.add(num[i]); } HashSet<String> s = new HashSet<String>(); LinkedList<Integer> l = new LinkedList<Integer>(); String current = ""; generate(current,l,s,numl,res); return res; } }
相关文章推荐
- leedcode做题总结,题目ZigZag Conversion2011-12-05(wrong answer)
- leedcode做题总结,题目Reorder List 13/11/12
- leedcode做题总结,题目Sum Root to Leaf Numbers 2013/02/18
- leedcode做题总结,题目Median of Two Sorted Arrays----- 2011/03/27
- leedcode做题总结,题目Gas Station-------- 2013/09/28
- leedcode做题总结,题目Reverse Words in a String14/03/05
- leedcode做题总结, 题目Unique Binary Search TreesI/II95/96
- leedcode做题总结,题目Binary Tree Zigzag Level Order Traversal 2012/09/28
- leedcode做题总结,题目Remove Element 2012/02/16
- leedcode做题总结,题目Find Minimum in Rotated Sorted ArrayI/II 153/154
- leedcode做题总结,题目Pascal's Triangle I/II-------2012/10/28
- leedcode做题总结,题目Path SumI/II-------- 2012/10/13-14
- leedcode做题总结,题目Balanced Binary Tree 2012/10/08
- leedcode做题总结,题目Linked List Cycle I/II 13/10/28-30
- leedcode做题总结, 题目Find Minimum in Rotated Sorted Array I/II
- leedcode做题总结, 题目Construct Binary Tree from Preorder。。。105/106
- leedcode做题总结,题目Convert Sorted Array to Binary Search Tree 2013/02/18
- leedcode做题总结,题目Binary Tree Preorder Traversal 2013/11/05
- leedcode做题总结,题目Rotate Image 2012/03/17
- leedcode做题总结,题目Two Sum2011-03-13