LeetCode 46 Permutations (全排列)

Given a collection of distinct numbers, return all possible permutations.

For example,

[1,2,3] have the following permutations:

[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

题目链接:https://leetcode.com/problems/permutations/

题目大意:求全排列

题目分析:求全排列的算法分为以下几步

1. 找最后一个升序的末尾位置pos1

2. 找在pos1 - 1后的最后一个大于它的数字位置pos2

3. 交换pos1 - 1和pos2位置的数

4. 对pos1及之后的数字从小到大排序

例如 1 5 2 4 3,pos1 = 3,pos2 = 4交换得1 5 3 4 2,pos1后排序得1 5 3 2 4

public class Solution {

    void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }

    boolean nextPermutation(int[] nums, int len) {
        int pos1 = -1, pos2 = 0;
        for(int i = len - 1; i >= 1; i--) {
            if(nums[i] > nums[i - 1]) {
                pos1 = i;
                break;
            }
        }
        if(pos1 == -1) {
            return false;
        }
        for(int i = len - 1; i >= pos1; i--) {
            if(nums[i] > nums[pos1 - 1]) {
                pos2 = i;
                break;
            }
        }
        swap(nums, pos1 - 1, pos2);
        Arrays.sort(nums, pos1, len);
        return true;
    }

    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> ans = new ArrayList<>();
        List<Integer> currentList;
        Arrays.sort(nums);
        int cnt = 0;
        int len = nums.length;
        do {
            currentList = new ArrayList<>();
            for(int i = 0; i < len; i++)
                currentList.add(nums[i]);
            ans.add(currentList);
        }while(nextPermutation(nums, len));
        return ans;
    }
}
时间: 2024-10-15 10:23:23

LeetCode 46 Permutations (全排列)的相关文章

DFS解法的两道题 Leetcode 46 Permutations &amp; Leetcode 78 Subset

Leetcode 78 Subset Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be in non-descending order. The solution set must not contain duplicate subsets. For example,If S = [1,2,3], a solution is: [ [3], [1

leetCode 46. Permutations 回溯问题 | Medium

46. Permutations(全排列问题--回溯问题经典) Given a collection of distinct numbers, return all possible permutations. For example,[1,2,3] have the following permutations: [   [1,2,3],   [1,3,2],   [2,1,3],   [2,3,1],   [3,1,2],   [3,2,1] ] 题目大意:求一个序列的全排列. 思路:做排列

[Lintcode]15. Permutations/[Leetcode]46. Permutations

15. Permutations/46. Permutations 本题难度: Medium Topic: Search & Recursion Description Given a list of numbers, return all possible permutations. Example Example 1: Input: [1] Output: [ [1]] Example 2: Input: [1,2,3] Output: [ [1,2,3], [1,3,2], [2,1,3]

LeetCode 46 Permutations(全排列问题)

题目链接:https://leetcode.com/problems/permutations/?tab=Description Problem:给出一个数组(数组中的元素均不相同),求出这个数组能够产生的所有全排列 采用递归算法,传入参数 List<List<Integer>> list, List<Integer> tempList, int[] nums, boolean[] used 其中list保存最终结果 tempList保存其中一个全排列 nums为最初的

46. Permutations (全排列)

Given a collection of distinct numbers, return all possible permutations. For example,[1,2,3] have the following permutations: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 运用递归. 1234为例子 for  i in 1234: 1  +  234(的全排列) 2  +  134(的全排列) 3  +

leetcode 46 Permutations Python 实现(回溯算法)

Given a collection of distinct integers, return all possible permutations. Example: Input: [1,2,3]Output:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]] 回溯算法自己的一个思路如下:需要保留数字使用情况,my_nums增加和删除元素等操作 1 class Solution: 2 def permute(self, nums: Li

46 Permutations(全排列Medium)

题目意思:全排列 思路:其实看这题目意思,是不太希望用递归的,不过还是用了递归,非递归的以后再搞吧 ps:vector这玩意不能随便返回,开始递归方法用vector,直接到500ms,换成void,到12ms 1 class Solution { 2 public: 3 vector<vector<int>> permute(vector<int>& nums) { 4 vector<vector<int> >ans; 5 permute

LeetCode 46. Permutations

原题 Given a collection of distinct numbers, return all possible permutations. For example,[1,2,3] have the following permutations: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 解题思路 递归:递归的方法,创建一个visit判断此值是否已经添加过,每一层不断地循环,加入没有被访问的元素,直到最后结果的长

leetcode 46 Permutations ----- java

Given a collection of distinct numbers, return all possible permutations. For example,[1,2,3] have the following permutations: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 给定一个数组,求所有的排列组合. 做出这道题很简单,主要是要比较快的速度,第一次做,耗时5ms,比较慢,主要就是用递归,每次向arr