当前位置: 首页 > 面试题库 >

java 中数组的排列。

岳泳
2023-03-14
问题内容

给定不同整数的数组,打印数组的所有排列。

例如:

array : [10, 20, 30]

Permuations are :

[10, 20, 30] [10, 30, 20] [20, 10, 30] [20, 30, 10] [30, 10, 20] [30, 20, 10]

问题答案:

我们可以借助递归来解决问题。递归很难解释,所以我创建了一个递归树来演示它。

这是相同的代码。

package org.arpit.java2blog;

import java.util.ArrayList;
import java.util.List;

public class PermutateArray {

    public static void main(String[] args) {
        PermutateArray pa=new PermutateArray();

        int[] arr= {10, 20, 30};

        List<List<Integer>> permute = pa.permute(arr);

        System.out.println("Permuations of array : [10, 20, 30] are:");
        System.out.println("=========================================");
        for(List<Integer> perm:permute)
        {
            System.out.println(perm);
        }

    }
    public List<List<Integer>> permute(int[] arr) {
        List<List<Integer>> list = new ArrayList<>();
        permuteHelper(list, new ArrayList<>(), arr);
        return list;
    }

    private void permuteHelper(List<List<Integer>> list, List<Integer> resultList, int [] arr){

        // Base case
        if(resultList.size() == arr.length){
            list.add(new ArrayList<>(resultList));
        } 
        else{
            for(int i = 0; i < arr.length; i++){ 

                if(resultList.contains(arr[i])) 
                {
                    // If element already exists in the list then skip
                    continue; 
                }
                // Choose element
                resultList.add(arr[i]);
                // Explore
                permuteHelper(list, resultList, arr);
                // Unchoose element
                resultList.remove(resultList.size() - 1);
            }
        }
    } 

}

当你运行上面的程序时,你会得到以下输出:

Permuations of array : [10, 20, 30] are:
=========================================
[10, 20, 30] [10, 30, 20] [20, 10, 30] [20, 30, 10] [30, 10, 20] [30, 20, 10]

我已经用下图说明了递归是如何在这里工作的。

您需要在新窗口中打开此图表并对其进行缩放。

由于数组中有 3 个元素,因此每个节点有 3 个分支。



 类似资料:
  • 问题内容: 我为无法快速找到答案感到困惑。我本质上是在寻找Java中的一种实现接口的数据结构,但该结构按顺序存储其成员。我知道您可以使用法线并在其上使用,但是我遇到的情况是,我偶尔会添加并经常从列表中检索成员,并且我不想每次检索成员时都对其进行排序,以防万一新增加了一个。谁能指出我在JDK甚至第3方库中都存在的这种东西? 编辑 :数据结构将需要保留重复项。 总结 :我发现所有这些都很有趣,并且学到

  • 我做了一个代码,应该显示数组中元素排列的整个组合。 应该是什么: 123 213 231 132 312 321 但结果是这样的: 231 312 123 231 312 123 如何以应有的方式进行排列?

  • 我是Java和Stack Overflow的新手,我有一个关于排列的问题。 方法:我使用中的对象生成。每个的大小从(可能最小为1)到,并包含具有唯一名称属性的自定义生成对象。 问题:现在我的问题是如何在我的外部(y轴)中获得从第一个到最后一个的所有可能对象组合的排列(我想我们可以说这是x轴)? 我试着举一个简单的例子: : 1.1|1.2|1.3 : 2.1 : 3.1|3.2 这里,这些位于外部

  • 我有2个java数组 如果我按升序对int数组排序,它将是: 现在我想相应地对名称数组进行排序。输出应为: 我该如何维持一段关系?我见过这个链接(基于其他排序的数组排序数组),但它是针对js的

  • 主要内容:升序,降序我们在学习 Java 的过程中肯定会遇到对数组进行升序或降序等排序问题,本节主要介绍如何实现 Java 数组的升序和降序。Java 语言使用 Arrays 类提供的 sort() 方法来对数组进行排序。 升序 使用 java.util.Arrays 类中的 sort() 方法对数组进行升序分为以下两步: 导入 java.util.Arrays 包。 使用 Arrays.sort(数组名) 语法对数

  • 嗨,我目前有4个数组都持有不同的数据,我遇到的问题是我想按字母顺序对其中一个数组进行排序,通常我会这样做 其中数组将是我想按字母顺序排序的数组,但我需要数组一起排序。 比如说我的数组是这样的 我想根据Pet数组进行排序,我的输出应该是这样的,所有的第三个值现在都是第一个,第一个值现在是第三个(这比简化了很多,我的实际数组包含数千个输入) 有没有一种简单的方法可以做到这一点,我可以对一个数组进行排序