2015-11-06 113 views
-2

我想打印数组长度为n和子集长度为k的数组的子集。例如,您有{1,2,3},并且您必须在不同的行中打印{1,2} {1,3} {2,3}并对其进行排序(加上您必须打印{1,2}在{1,3}之前) 我搜索了网页,但他们使用了不允许的数组列表。 我很感激,如果有人请帮助解决这个问题。如何在java中打印具有特定长度的数组的子集

+2

请向我们展示一些代码,即您到目前为止做了些什么以及您卡在哪里。 StackOverflow不是回答一般问题或免费编码,但社区很乐意帮助您解决特定问题。谢谢,欢迎! – plamut

+0

输入数组是否排序?输入数组是否可以包含重复条目? –

+0

该数组没有重复的条目,并且该数组未被排序。 –

回答

0

我们主要对数组进行排序并调用称为loopy_loop的递归方法。如果这是一个新的标准,你可以在这里问一个自定义排序。

public static void main(String[] args) { 
    int[] source = {0,8,2,3,1,9,5,6,4,7}; 
    int k = 3, n = 10; 
    int[] destination = new int[k]; 

    // first the sorting 
    Arrays.sort(source); 


    for (int i = 0; i < n; i++) 
     System.out.print(source[i] + " "); 
    System.out.println(); 

    if (k > 0) 
     loopy_loop(source, destination, 0, 0); 

} 

这是一个递归函数。该级别遵循(int)k的值并确定要在目的地[]中填充的位置以及递归的“深度”。

public static void loopy_loop(int[] source, int[] destination, int level, int startIndex) { 

    for (int i = startIndex; i < source.length - destination.length + level + 1; i++) { 
     destination[level] = source[i]; 
     if (level == destination.length - 1) 
     { 
      String rez = String.valueOf(destination[0]); 
      for (int j = 1; j < destination.length; j++) 
       rez += ", " + destination[j]; 
      System.out.println("{"+ rez +"}"); 
     } 
     else 
      loopy_loop(source, destination, level + 1, i + 1); 
    } 

} 
相关问题