在 Java 中生成所有可能的組合

Sheeraz Gul 2023年10月12日
  1. 在 Java 中使用遞迴生成所有可能的組合
  2. 在 Java 中使用包括-排除法生成所有可能的組合
在 Java 中生成所有可能的組合

本教程演示如何在 Java 中生成陣列元素的所有可能組合。

在 Java 中使用遞迴生成所有可能的組合

首先,我們建立一個空陣列來儲存輸出。這個想法是一個一個地修復元素,然後使用遞迴。

最後,當初始陣列中的元素數量等於組合的大小時,我們列印初始陣列。讓我們嘗試在 Java 中實現它。

package delftstack;

import java.io.*;

public class Possible_Combinations {
  static void CombinationPossible(int Input_Array[], int Empty_Array[], int Start_Element,
      int End_Element, int Array_Index, int r) {
    // Current combination is ready to be printed, print it
    if (Array_Index == r) {
      for (int x = 0; x < r; x++) {
        System.out.print(Empty_Array[x] + " ");
      }
      System.out.println("");
      return;
    }

    for (int y = Start_Element; y <= End_Element && End_Element - y + 1 >= r - Array_Index; y++) {
      Empty_Array[Array_Index] = Input_Array[y];
      CombinationPossible(Input_Array, Empty_Array, y + 1, End_Element, Array_Index + 1, r);
    }
  }

  static void Print_Combination(int Input_Arrary[], int n, int r) {
    int Empty_Array[] = new int[r];
    CombinationPossible(Input_Arrary, Empty_Array, 0, n - 1, 0, r);
  }

  public static void main(String[] args) {
    int Input_Array[] = {10, 30, 50, 70, 90, 100};
    int r = 3;
    int n = Input_Array.length;
    Print_Combination(Input_Array, n, r);
  }
}

上面的程式碼將以三個數字的形式生成給定陣列的所有可能組合。見輸出:

10 30 50
10 30 70
10 30 90
10 30 100
10 50 70
10 50 90
10 50 100
10 70 90
10 70 100
10 90 100
30 50 70
30 50 90
30 50 100
30 70 90
30 70 100
30 90 100
50 70 90
50 70 100
50 90 100
70 90 100

在 Java 中使用包括-排除法生成所有可能的組合

同樣,我們建立一個空陣列並使用 Pascal 恆等問題來生成陣列的所有可能組合。

在這種方法中,我們考慮給定陣列的元素並使用這兩種情況進行遞迴。第一種情況是當前組合中包含的元素。

第二種情況是當前組合中排除了該元素。讓我們嘗試在 Java 中實現這個方法。

package delftstack;

import java.io.*;

public class Possible_Combinations {
  static void PossibleCombinations(
      int Input_Array[], int n, int Length, int Array_Index, int Empty_Array[], int x) {
    if (Array_Index == Length) {
      for (int y = 0; y < Length; y++) System.out.print(Empty_Array[y] + " ");
      System.out.println("");
      return;
    }

    if (x >= n)
      return;

    Empty_Array[Array_Index] = Input_Array[x];
    PossibleCombinations(Input_Array, n, Length, Array_Index + 1, Empty_Array, x + 1);

    PossibleCombinations(Input_Array, n, Length, Array_Index, Empty_Array, x + 1);
  }

  static void Print_Combination(int Input_Array[], int n, int Length) {
    int Empty_Array[] = new int[Length];

    PossibleCombinations(Input_Array, n, Length, 0, Empty_Array, 0);
  }

  public static void main(String[] args) {
    int Input_Array[] = {10, 30, 50, 70, 90, 100};
    int Length = 3;
    int n = Input_Array.length;
    Print_Combination(Input_Array, n, Length);
  }
}

上面的程式碼將以三個數字的形式生成給定陣列的所有可能組合。見輸出:

10 30 50
10 30 70
10 30 90
10 30 100
10 50 70
10 50 90
10 50 100
10 70 90
10 70 100
10 90 100
30 50 70
30 50 90
30 50 100
30 70 90
30 70 100
30 90 100
50 70 90
50 70 100
50 90 100
70 90 100
作者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook