leetcode Permutations II

原创 2016年06月01日 20:35:56

题目链接

这个题目其实就是考一个排列的生成算法。这个算法很有名。就是开始不断的增加字典序。所以大家可以随便在网上搜索排列生成算法就好

public class Solution {
    public List<List<Integer>> permuteUnique(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> result=new LinkedList<List<Integer>>();
        ArrayList<Integer> temp=new ArrayList<Integer>(nums.length);
        for(int i=0;i<nums.length;i++)
        {
            temp.add(nums[i]);
        }


        boolean haveNext=true;
        while(haveNext)
        {
            result.add(getCopy(temp));
            haveNext=false;
            int i=temp.size()-1;
            while(i>=1&&temp.get(i-1)>=temp.get(i))
            {
                i--;
            }
            if(i!=0)
            {
                haveNext=true;
                int swapIndex=i-1;
                int key=temp.get(swapIndex);
                int k=temp.size()-1;
                while(k>i&&temp.get(k)<=key)
                {
                    k--;
                }

                int middletemp=temp.get(swapIndex);
                temp.set(swapIndex, temp.get(k));
                temp.set(k,middletemp);

                reverse(temp,swapIndex+1,temp.size()-1);    
            }
        }
        return result;

    }

    public void reverse(ArrayList<Integer> tar,int start,int end)
    {
        int temp;
        while(start<end)
        {
            temp=tar.get(start);
            tar.set(start, tar.get(end));
            tar.set(end,temp);
            start++;
            end--;
        }
    }


    public List<Integer> getCopy(List<Integer> ori)
    {
        List<Integer> result=new ArrayList<Integer>();
        result.addAll(ori);
        return result;
    }
}

leetcode 46. Permutations-全排列|回溯|递归|非递归

原题链接:46. Permutations 【思路-Java、Python】递归实现 全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例...
  • happyaaaaaaaaaaa
  • happyaaaaaaaaaaa
  • 2016年05月29日 22:15
  • 3617

leetCode 47.Permutations II (排列组合II) 解题思路和方法

Permutations II  Given a collection of numbers that might contain duplicates, return all possible...
  • xygy8860
  • xygy8860
  • 2015年07月13日 13:09
  • 498

一次搞懂全排列——LeetCode四道Permutations问题详解

LeetCode中与Permutations相关的共有四题:   31. Next Permutation   46. Permutations   47. Permutations II  ...
  • Jacky_chenjp
  • Jacky_chenjp
  • 2017年03月26日 17:52
  • 2905

【LeetCode-面试算法经典-Java实现】【113-Path Sum II(路径和)】

【113-Path Sum II(路径和II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a binary tree and a sum, find al...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月12日 06:23
  • 2503

[LeetCode]—Permutations II 求全排列(有重复值)

Permutations II   Given a collection of numbers that might contain duplicates, return all po...
  • SUN20082567
  • SUN20082567
  • 2014年07月10日 11:55
  • 591

买卖股票的最佳时机I II III IV

买卖股票的最佳时机I II III IV I假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润。II假设有一...
  • u010669349
  • u010669349
  • 2017年12月22日 22:47
  • 32

Leetcode 454. 4Sum II 四数之和2 解题报告

1 解题思想首先,这是一道远古之前的题的进化版: Leetcode #18 4Sum 四数之和 解题小节+K-Sum思想 但是我不想说那个题了,因为我也记不住了。。这道题意思就是ABCD四个数组,长...
  • MebiuW
  • MebiuW
  • 2016年11月16日 22:45
  • 2778

Permutations II解法代码的解释

47.Permutations II Given a collection of numbers that might contain duplicates, return all poss...
  • u010235142
  • u010235142
  • 2017年06月19日 14:42
  • 75

Leetcode 240 Search a 2D Matrix II (二分法和分治法解决有序二维数组查找)

1.问题描述  写一个高效的算法,从一个m×nm\times n的整数矩阵中查找出给定的值,矩阵具有如下特点:    每一行从左到右递增。 每一列从上到下递增。 2. 方法与思路2.1 二分查找法 ...
  • Jeanphorn
  • Jeanphorn
  • 2015年07月23日 20:41
  • 3107

【LeetCode-面试算法经典-Java实现】【219-Contains Duplicate II(包含重复元素II)】

【219-Contains Duplicate II(包含重复元素II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wang-...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月29日 06:36
  • 3261
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:leetcode Permutations II
举报原因:
原因补充:

(最多只允许输入30个字)