2014-02-08 45 views
-2

我給出了第一個數組的大小4。 (這將隨測試案例而變化)。如何把permuations放到一個int數組中

讓說的INT []的元素{1, 3, 3, 4}

什麼算法或公式有使排列並把它們放到一個int [] []?

例如:在以上至3
a[0][] = {1, 3, 3}
a[1][] = {1, 3, 4}
a[2][] = {1, 3, 4}
a[3][] = {3, 3, 4}

組陣列的排列也記住,第一陣列的大小將不總是4,但它總是在3組中。

基本上我需要把一個int []的排列放到另一個r int [] []

+0

難以理解。 –

+0

對不起,基本上我需要把一個int []的排列放到另一個int [] []中。 – XT1shX

+0

看起來像https://stackoverflow.com/questions/20906214/permutation-algorithm-for-array-of-integers-in-java是相當接近你的問題的答案......(將「the」改爲「一個「,因爲毫無疑問有多個好的解決方案。) – keshlam

回答

0

最後我實現了permutation算法,用於任何大小的輸入數組。這很有趣,這裏是:

import java.util.Arrays; 

public class PermutationCalculator { 
    public static void main(String[] args) { 
     final int[] input = {1, 3, 3, 4}; 
     int[][] result = new PermutationCalculator().permutation(input); 

     // print result 
     for (int i = 0; i < input.length; i++) { 
      System.out.println(Arrays.toString(result[i])); 
     } 
    } 

    public int[][] permutation(int[] input) { 
     int[][] result = new int[input.length][]; // i-th row 
     for (int i = input.length - 1; i >= 0; i--) { 

      // negI starts from 0 instead of i which start from end 
      int negI = input.length - i - 1; 
      result[negI] = new int[input.length - 1]; 

      // j is row input array index, 
      // jj is column index (column length = input array -length - 1) 
      for (int j = 0, jj = 0; jj < input.length; j++, jj++) 
       if (jj == i) { 
        j--; // don't need increasing in this case 
       } else { 
        result[negI][j] = input[jj]; 
       } 
     } 

     return result; 
    } 
} 

輸出是:

[1, 3, 3] 
[1, 3, 4] 
[1, 3, 4] 
[3, 3, 4] 
+0

謝謝這有助於很多! – XT1shX

相關問題