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
原创粉丝点击