JAVA遞迴和非遞迴輸出字串的全排列

2021-06-16 20:15:30 字數 1231 閱讀 4308

要輸出字元s從[start,end]間的全排列,只要將s[start,end]依次與s[start]替換並輸出s從[start+1,end]的全排列即可。

//遞迴輸出全排列

public static void fullpermutation(string s)

private static void permutation(char chararray,int start,int end)

}} }

private static void swapchar(char chararray,int index1 ,int index2)

}

非遞迴演算法:

(1)將字串s按公升序排序,輸出字串(2)從後往前找到第乙個相鄰非逆序對的第乙個元素的位置i(比如12354從後往前的第乙個相鄰非逆序對是25,位置是2,注:起始位置0),然後,從後往前查詢第乙個比s[i]大的元素的位置j(例子中是4所在的位置,即4),將s[i]和s[j]交換,並將s從i+1到結束按公升序排序,輸出字串(3)重複(2)直到s中的所有元素都是逆序,即(2)中的i為-1。

public static void fullpermutationwithoutrecursion(string s)

char chararray = s.tochararray();

quicksort(chararray,0,chararray.length - 1);

outputarray(chararray);

while(true)

swapchar(chararray,i,j);

quicksort(chararray,i+1,chararray.length-1);

outputarray(chararray);

} } public static void quicksort(char chararray,int begin,int end)

{ if(begin < end)

{ int flag = begin + (int)math.ceil(math.random()*(end - begin));

char tmp = chararray[flag];

swapchar(chararray,flag,end);

int i = begin,j = end;

while(i < j)

{while(itmp)

--j;

if(i

遞迴的應用,輸出字串的所有排列(java)

看到乙個題目 輸出乙個字串的所有排列。大致想了一下,覺得需要用到遞迴,而遞迴是我不太擅長的,所以就想練一下。在知道遞迴之前,容易想到的一種辦法是 假設字串為s,那麼寫乙個有s.length 層巢狀的迴圈形如 這個方法比較容易實現,演算法也簡單,但是有乙個前提 字串s的長度必須是已知的,否則就會不知道...

字串逆置(遞迴和非遞迴)

單鏈表逆置 遞迴 要時時刻刻記著,我們要返回的是當前鍊錶的尾結點,這樣的話if和else中的內容就很清楚了。逆置單鏈表,返回原單鏈表的尾結點。linklist reverserecursive linklist l return reversehead 單鏈表逆置 非遞迴 根據劍指offer上的講述...

C C 18 3 遞迴反向輸出字串

遞規反向輸出字串的例子,可謂是反序的經典例程 遞規反向輸出字串 include include include include include using namespace std void inverse char p int main 對於檔案操作 遞規反向輸出字串 檔案為逐行倒敘 inclu...