Permutations java实现

Given a collection of 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], and [3,2,1].

实现思想:

给定一个数组[1,2,3,4]
1、[1,[2,3,4]] ---------->[2,3,4]的子数组计算--->[2,[3,4]],[3,[2,4]]和[4[2,3]]
2、[2,[1,3,4]]
3、[3,[1,2,4]]
4、[4,[1,2,3]]

从上面可以看出,需要使递归的思想。

java代码实现如下:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

public class Solution {

    public List<List<Integer>> permute(int[] num) {
        List<List<Integer>> list = new ArrayList<>();
        if(num.length == 1){                                //当数据中只有一个元素时,只需要一种情况
            List<Integer>lst = new ArrayList<>();
            lst.add(num[0]);
            list.add(lst);
        }
        else{
            for(int i = 0 ; i < num.length ; i++){
                int[] num1 = new int[num.length-1];
                int j = 0;
                int k = 0;
                while(j < num.length){                 //while语句是用来得到当前数组的子数组
                    if(j != i){
                        num1[k++] = num[j++];
                    }
                    else
                        j++;
                }

                List<List<Integer>> list1 = permute(num1);
                Iterator<List<Integer>> it = list1.iterator();
                while(it.hasNext()){                       //取出子数组得到集合中与当前元素进行组成
                    List<Integer>lst = new ArrayList<>();
                    lst.add(num[i]);
                    lst.addAll( it.next());
                    list.add(lst);
                    }
                }
            }
        return list;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] num = {1,2,3};
        System.out.println(new Solution().permute(num));
    }

}

Permutations java实现,布布扣,bubuko.com

时间: 2024-12-16 10:19:53

Permutations java实现的相关文章

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

46. Permutations java solutions

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] ] Subscribe to see which companies asked this question 1 public clas

47. Permutations II java solutions

Given a collection of numbers that might contain duplicates, return all possible unique permutations. For example,[1,1,2] have the following unique permutations: [ [1,1,2], [1,2,1], [2,1,1] ] 1 public class Solution { 2 List<List<Integer>> ans

Permutations II leetcode java

题目: Given a collection of numbers that might contain duplicates, return all possible unique permutations. For example, [1,1,2] have the following unique permutations: [1,1,2], [1,2,1], and [2,1,1]. 题解: 这道题跟Permutaitons没啥大的区别,就是结果去重. 我之前也有写过去重的两个方法: 一

Permutations leetcode java

题目: Given a collection of 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], and [3,2,1]. 题解: 这道题就用循环递归解决子问题. 因为求所有组合,这就意味着不能重复使用元素,要用visited数组. 有因为是所有可能的组合,所以

46. Permutations(java,无重复元素,字典序 + 非字典序)

题目:Given a collection of distinct numbers, return all possible permutations. 解析:本题可以有两种方法解决 方法一:1)将第一个元素依次与所有元素进行交换: 2)交换后,可看作两部分:第一个元素及其后面的元素: 3)后面的元素又可以看作一个待排列的数组,递归,当剩余的部分只剩一个元素时,得到一个排列: 4)将第1步中交换的元素还原,再与下一个位元素交换. 重复以上4步骤,直到交换到最后一个元素.(参考剑指offer讲解)

47. Permutations II (java )

题目: Given a collection of numbers that might contain duplicates, return all possible unique permutations. 解析: 编码:

[LeetCode][Java] Permutations

题目: Given a collection of 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], and [3,2,1]. 题意: 给定一组数字,返回所有的可能的组合. 比如: [1,2,3] 有下面的组合: [1,2,3], [1,3,2], [2,1,3],

全排列问题(JAVA和Python实现)

问题:给定指定字符串(ABCCEF)输出其全排列.   运用分治的思想 JAVA:用TreeSet去重(且保持有序) import java.util.Set; import java.util.TreeSet; public class Main { static Set<String> result=new TreeSet<String>();//用来去掉重复的元素 public static void fullPermutation(char[] data, int flag