2015-12-31 3 views
0

Я только что написал код для печати всех возможных перестановок от от 1 до n в массиве int на Java, но я думаю, что это сложнее, чем нужно. Я использую Hashset, чтобы избежать повторений. Если кто-то найдет что-то, чем можно упростить, напишите.Печать всех перестановок целочисленного массива в Java

import java.util.*; 

public class ProblemFour { 
    private static int n; 

    private static void printResult(int[] result) { 
     Set<Integer> set = new HashSet<>(); 
     Integer[] nums = new Integer[result.length]; 

     for (int i = 1; i <= n; i++) { 
      nums[i - 1] = result[i - 1]; 
     } 

     for (Integer num : nums) { 
      set.add(num); 
     } 
     if(set.size() == n) { 
      String s = "[ "; 
      for (Integer num : nums) { 
       s += num + " "; 
      } 
      System.out.println(s + "] "); 
     } 
    } 

    private static void permute(int[] result, int index) { 
     if (index == result.length) { 
      printResult(result); 
      return; 
     } 
     for (int i = 1; i <= n; i++) { 
      result[index] = i; 
      permute(result, index+1); 
     } 
    } 


    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     System.out.print("From 1 to: "); 
     n = input.nextInt(); 

     int[] result = new int[n]; 

     permute(result, 0); 
    } 
} 
+8

Похоже, это означало для http://codereview.stackexchange.com/ – Manu

+0

Я голосую, чтобы закрыть этот вопрос не по теме, так как этот вопрос является открытым и, следовательно, делает не подходит для этого Q & A-сайта. – Sumurai8

ответ

0

Я сделал этот код перестановок обратно, он использует списки в качестве структуры данных в нем.

public List<List<Integer>> permute(int[] numbers) { 
// we use a list of lists rather than a list of arrays 
// because lists support adding in the middle 
// and track current length 
List<List<Integer>> permutations = new ArrayList<List<Integer>>(); 
// Add an empty list so that the middle for loop runs 
permutations.add(new ArrayList<Integer>()); 

for (int i = 0; i < numbers.length; i++) { 
    // create a temporary container to hold the new permutations 
    // while we iterate over the old ones 
    List<List<Integer>> current = new ArrayList<List<Integer>>(); 
    for (List<Integer> permutation : permutations) { 
     for (int j = 0, n = permutation.size() + 1; j < n; j++) { 
      List<Integer> temp = new ArrayList<Integer>(permutation); 
      temp.add(j, numbers[i]); 
      current.add(temp); 
     } 
    } 
    permutations = new ArrayList<List<Integer>>(current); 
} 

return permutations; 

}

Смежные вопросы