Java中的排列解釋[帶有編碼示例]

已發表: 2020-11-24

JAVA 由 Sun Microsystems 的 James Gosling 於 1995 年開發。使用 JAVA,開發人員可以創建能夠在幾乎任何平台上運行的穩定、安全和彈性的應用程序,包括基於 Linux、Windows 和 macOS 的操作系統。

JAVA(也稱為 WORA)Write Once,Run Always屬性也省去了重新編譯已經編譯過一次的代碼的需要。 JAVA 的這種多功能性使其成為將內置的複雜邏輯和數學功能集成到幾乎所有類型的跨平台應用程序中的理想語言。

與任何其他替代(或流行)Web 開發環境相比,使用 JAVA 開發 Web 應用程序的優勢延伸到持續應用程序優勢的三個主要支柱,即:

  1. JAVA 語法易於學習和適應,適合各種速度和復雜程度的編碼人員。 這使得 JAVA 成為人事頻繁變動的開發團隊的安全選擇。 新資源與通用開發平台 (JAVA) 保持一致所需的時間是業內最少的之一。
  2. JAVA 是一種高級的、面向對象的編程語言,這使得它在方法上完全模塊化,並使開發人員能夠創建功能上可重用的代碼塊,從而減少工作量。 龐大的內置函數庫還減少了對其他三級插件或編譯器插件、腳本等的依賴——這反過來又使 JAVA 成為最少的實現時間之一。
  3. 如上所述,JAVA 獨立於平台,融合了世界上最好的東西。 用 JAVA 開發的 Web 應用程序可以輕鬆地從一個操作系統遷移到另一個操作系統,並且功能零損失,這是在任何開發環境中擁有的無價實用程序。

作為使 JAVA 作為 Web 開發平台如此有利可圖的方面之一,它的最小實現依賴性數學上合理的語法可以被慷慨地利用來執行幾乎任何數學或邏輯指令,只需調用一個內置函數,只需最少的額外定制。

代碼中這種靈活性最突出的例子之一是在 JAVA 中執行排列的能力——更具體地說,是真正隨機化並找到特定字符串中所有可用字符的所有可能排列。

在本指導教程中,我們將學習如何嘗試在 JAVA 中執行此排列,方法是將字符串的第一個字符存儲在字符串的“跟踪”位置,並調用 generatePermutation() 函數以隨機化所有其他的不同變化字符串中的字符。

閱讀: Java 面試問答

目錄

Java中的排列——回溯算法的概念

要解決JAVA 中的這個排列問題,我們必須首先熟悉一個在 Web 開發社區中已被廣泛接受的概念,即回溯算法是一個遞歸過程,它依賴於週期性地固定給定字符串一個字符並將其與所有其他字符的所有可能排列組合,並在字符串的每個位置分別重複此過程,以達到最大值(以及所有可能的)該字符串的變體數量。

JAVA 中的這種置換算法在給定三個字符的字符串的上下文中更容易理解。 假設給定字符串中的這三個字符是 A、B 和 C。

在 JAVA中執行這種排列的第一步是先固定一個字符(我們總是從固定第一個位置的可用字符開始),然後將所有剩餘的字符與原始字符(固定)字符。

例如,在 ABC 字符串示例中,我們將通過固定字符A (這是 ABC 字符串中的然後我們得出以下組合: ABC BACCBA

下一步是類似地“修復”在字符串的下一個位置找到的字符(在這種情況下,在字符串的第二個位置找到的字符,即B )並交換剩餘的字符(包括被最終,我們將在實現每個隨機化級別的情況下繼續重複此步驟,直到我們得到所有可能排列完整集合:

美國廣播公司

ACB

BAC

BCA

CBA

出租車

在本文末尾提供的示例代碼/所需輸出部分中,我們將把在 JAVA 中執行排列的嘗試轉化為清晰的代碼,從而實時計算排列。

在 JAVA 中執行置換——回溯和交換的遞歸算法

在 JAVA 中獲取隨機字符串並執行徹底置換的過程的簡要總結,可以用以下逐步遞歸算法來描述:

  1. 字符串定義——首先,定義一個字符串。 您始終可以選擇接受隨機字符串作為輸入變量,但為了明確目的和努力,我們將在此示例中使用預定義的字符串 ABC。
  2. 字符修復- 修復一個字符(從第一個位置的字符開始,並繼續將其與所有剩餘字符交換)。
  3. generatePermutation() – 為所有剩餘字符調用並使用 generatePermutation() 函數的輸出。
  4. 遞歸回溯——執行“回溯”算法,並不斷遞歸地交換字符,直到您的代碼到達字符串的末尾(在我們當前的示例中,直到 C)。

在 JAVA 中執行排列 - 示例代碼:

公共類 PermuteString {

//定義一個函數來交換位置i處的字符與位置j處的所有字符

公共靜態字符串交換字符串(字符串 a,int i,int j){

// 字符串中固定字符的字符定義

char[] b =a.toCharArray();

字符 ch;

// 在下一步中執行交換

ch = b[i];

b[i] = b[j];

b[j] = 通道;

返回 String.valueOf(b);

}公共靜態無效主要(字符串 [] 參數)

{

//定義默認字符串ABC

字符串 str = “ABC”;

//計算字符串長度

int len = str.length();

//打印所有隨機化

System.out.println(“以下是字符串ABC的所有可能排列:”);

generatePermutation(str, 0, len);

}

//定義一個函數來生成字符串的所有可能排列

public static void generatePermutation(String str, int start, int end)

{

// 打印所有排列

如果(開始 == 結束-1)

System.out.println(str);

別的

{

for (int i = start; i < end; i++)

{

//固定一個字符來交換字符串

str = swapString(str,start,i);

//為所有剩餘字符遞歸調用 generatePermutation() 函數 generatePermutation(str,start+1,end);

//執行回溯算法以重新交換字符

str = swapString(str,start,i);

}

}

}

}

在 JAVA 中執行置換 - 來自示例代碼的輸出:

當您編譯並運行此示例時,所需的輸出應如下所示:

以下是字符串 ABC 的所有可能排列:

美國廣播公司

ACB

BAC

BCA

CBA

出租車

必讀:有趣的 Java 項目和主題

結論

我們希望您發現本教程對在 JAVA 中執行排列很有用。

如果您有興趣了解有關 Java、OOP 和全棧軟件開發的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發 PG 文憑,該文憑專為在職專業人士設計,提供 500 多個小時的嚴格培訓,9 + 項目和任務、IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。

為未來的職業做準備

行業值得信賴的學習 - 行業認可的認證。
了解更多