2015-09-30 264 views
3

我想了解給定輸入字符串的寫入排列代碼。For循環執行遞歸

例如:輸入字符串:123,輸出:123,132,213,231,312,321。

下面的粘貼代碼片段可以做到這一點。

public static void main(String args[]) { 

    permuteString("", "123"); 
    } 

public static void permuteString(String beginningString, String endingString) { 
    if (endingString.length() <= 1) 
     System.out.println(beginningString + endingString); 
    else 
     for (int i = 0; i < endingString.length(); i++) { 
      try { 
       // System.out.println(i); 
       String newString = endingString.substring(0, i) + endingString.substring(i + 1); 
       permuteString(beginningString + endingString.charAt(i), newString); 
      } catch (StringIndexOutOfBoundsException exception) { 
       exception.printStackTrace(); 
      } 
     } 

我得到關於何時整數'i'在被遞增循環,即從i=0 to 1. 一兩件事,我從第一次迭代理解是'i'得到增加到1當它擊中的基本情況,即

很迷茫
if (endingString.length() <= 1) 
     System.out.println(beginningString + endingString); 

我試圖進一步調試,我的價值保持在0和1之間的連續迭代,我不明白的變化。

總結, 我很困惑第一次迭代後"for loop"和try塊中的兩條指令之間的關係。

如果有人能指導我完成整個過程,我會很高興。

回答

2

我試圖儘可能詳細地闡述繪畫,希望它對我們有所幫助。 這個遞歸不需要try-catch塊,你可以刪除它,它會工作得很好

enter image description here

1

它並不那麼複雜:permuteString函數遍歷endingString的所有字符,並將其添加到構造好的開始字符串的末尾。 (並從endingString中移除該字符)在下一個permuteString調用中,它繼續使用更大的beginningString和更短的endingString進行工作。

這個遞歸併不是真的需要一個try-catch塊,你可以刪除catch並且它將完全可用。