leedcode做题总结, 题目Permutations I/II46/47
来源:互联网 发布:淘宝大拿韩代怎么样 编辑:程序博客网 时间:2024/06/08 06:26
这两道题是生成一串数字的所有可能排列,方法都是回溯法。第二题需要判断重复,这里使用一个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; }}
0 0
- leedcode做题总结, 题目Permutations I/II46/47
- leedcode做题总结, 题目Surrounded Regions130
- leedcode做题总结, 题目Median 80
- leedcode做题总结,题目Linked List Cycle I/II 13/10/28-30
- leedcode做题总结,题目Pascal's Triangle I/II-------2012/10/28
- leedcode做题总结, 题目Find Minimum in Rotated Sorted Array I/II
- leedcode做题总结,题目Two Sum2011-03-13
- leedcode做题总结,题目Reorder List 13/11/12
- leedcode做题总结,题目Same Tree 2012/09/03
- leedcode做题总结,题目Rotate Image 2012/03/17
- leedcode做题总结,题目Symmetric Tree 2012/09/23
- leedcode做题总结,题目Valid Palindrome 2013/01/12
- leedcode做题总结,题目Gas Station-------- 2013/09/28
- leedcode做题总结,题目Reverse Integer----- 2011/12/25
- leedcode做题总结,题目Remove Element 2012/02/16
- leedcode做题总结, 题目Longest Palindromic Substring 5
- leedcode做题总结,题目Reverse Words in a String14/03/05
- leedcode做题总结,题目ZigZag Conversion2011-12-05(wrong answer)
- Delphi TOpenDialog设置多个过滤条件
- Linux多线程与同步
- 基连接 <base href="">
- LINQ教程
- gcc与汇编
- leedcode做题总结, 题目Permutations I/II46/47
- 微信公众平台开发之基于百度 BAE3.0 的开发环境搭建(MyEclipse + SVN)
- asp.net对于海量数据的处理
- linux system directory
- 理解MySQL——索引与优化
- C. New Year Book Reading
- Java字符集编码的自动识别 jchardet
- OpenCV K-d树实现之FLANN (Fast Library for Approximate Nearest Neighbors) 算法实现及解析
- [设计模式学习笔记一][面向对象七大设计原则]