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

使用Java生成int数组的排列-错误

冉锋
2023-03-14
问题内容

我正在编写JAVA代码以生成整数数组的所有排列。尽管我得到的排列数正确,但是排列本身并不正确。

运行时,我获得:

Input array Length
3
1
2
3
0Permutation is
1,  2,  3,  
##########################
1Permutation is
1,  3,  2,  
##########################
2Permutation is
3,  1,  2,  
##########################
3Permutation is
3,  2,  1,  
##########################
4Permutation is
1,  2,  3,  
##########################
5Permutation is
1,  3,  2,  
##########################
6  number of permutations obtained
BUILD SUCCESSFUL (total time: 3 seconds)


public class PermulteArray {

    public static int counter = 0;

    public static void Permute(int[] input, int startindex) {
        int size = input.length;

        if (size == startindex + 1) {
            System.out.println(counter + "Permutation is");
            for (int i = 0; i < size; i++) {
                System.out.print(input[i] + ",  ");
            }
            System.out.println();
            System.out.println("##########################");
            counter++;
        } else {
            for (int i = startindex; i < size; i++) {

                int temp = input[i];
                input[i] = input[startindex];
                input[startindex] = temp;
                Permute(input, startindex + 1);
            }
        }
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Input array Length");
        int arraylength = in.nextInt();
        int[] input = new int[arraylength];
        for (int i = 0; i < arraylength; i++) {
            input[i] = in.nextInt();
        }
        counter = 0;
        Permute(input, 0);
        System.out.println(counter + "  number of permutations obtained");
    }
}

问题答案:
int temp=input[i];
input[i]=input[startindex];
input[startindex]=temp;
Permute(input, startindex+1);

您在调用Permute之前已经交换了一个元素,但是之后需要再次交换它,以在for循环的迭代中保持元素的一致位置。



 类似资料:
  • 问题内容: 给定不同整数的数组,打印数组的所有排列。 例如: 问题答案: 我们可以借助递归来解决问题。递归很难解释,所以我创建了一个递归树来演示它。 这是相同的代码。 当你运行上面的程序时,你会得到以下输出: 我已经用下图说明了递归是如何在这里工作的。 您需要在新窗口中打开此图表并对其进行缩放。 由于数组中有 3 个元素,因此每个节点有 3 个分支。

  • 问题内容: 我有以下课程。在此,虹膜是具有某些属性的另一类。 我想对此数组列表进行排序(即列表 helperList),基于距离参数降序。我已经编写了以下方法,但是它不起作用。 有人可以提出解决方案吗? 问题答案: 为什么不让您的类实现接口,然后使用Collections类提供的内置排序方法。 我认为这可以解决问题。另外,此方法是稳定的。 http://docs.oracle.com/javase

  • 问题内容: 该站点上有一些类似的问题也有所帮助,但是我不能完全弄清楚这个问题,所以我希望这不是重复的。 这是一项家庭作业,其中您具有一组字符[A,B,C],并且必须使用递归来获取所有排列(重复)。我具有的代码可以做到这一点: 但是,参数n应该定义输出的长度,因此,尽管此函数打印出长度为3的所有排列,但不能显示长度为2的排列。我已经尝试了所有可以想到的内容,并仔细研究了Google搜索结果,由于无法

  • 问题内容: 为什么我的打印输出数组未在以下代码中排序? 问题答案: 您需要两个循环来实现Bubble Sort。 样例代码:

  • 使用,为什么它显示(原始类型)和数组的不同列表大小? a) 使用array,每当我执行以下程序时,列表大小=1 b) 但是如果我从数组类型更改为数组(比如),那么我得到的列表大小是4,我认为是正确的。 PS:使用(包装类)数组,结果就可以了,但我不确定为什么在primitive数组中,列表大小是1。请解释一下。

  • 对于这个项目,我得到了一个字符串数组和一个整数数组。int[1]是字符串[1]的排名。我需要使用mergesort按1到n的顺序对int数组进行排序,我在下面已经完成了这项工作。但是当int数组被移动时,我还需要切换字符串数组的位置,以便它们都被排序,如果这有意义的话?我不知道我的编码有什么问题,甚至我的想法是否真的有效,但我一直在stringSorted[k]=stringRight[j]上得到