字串的排列與組合

2021-07-12 03:57:14 字數 2094 閱讀 5821

求字串的排列可以把字串看成兩部分:第一部分為它的第乙個字元,第二部分是後面的所有字元。

求字串的全排列的時候,可以用兩步完成:首先求所有可能出現在第乙個位置的字元,即把第乙個字元與後面的所有字元交換。第二步固定第乙個字元,求後面所有字元的排列。從中可以看出是典型的遞迴思路。 

/**

* 字串的全排列

*/public class permutation

/*** 求字串的全排列

** @param str

*/public void permutation(string str)

/*** 求begin位置開始字元陣列的排列

** @param strarr 字元陣列

* @param begin begin位置

*/private void permutation(char strarr, int begin) else }}

/*** 交換陣列中k1與k2位置的兩個元素

** @param arr

* @param k1

* @param k2

*/private void swap(char arr, int k1, int k2)

}

/**

* 字串的全排列

*/public class permutation

/*** 求字串的全排列

** @param str

*/public void permutation(string str)

/*** 求begin位置開始字元陣列的排列

** @param strarr 字元陣列

* @param begin begin位置

*/private void permutation(char strarr, int begin) else }}

}/**

* i***ist判斷j位置的字元是否已經在list[0]~list[j-1]中出現過了

* list是含重複字元的陣列,i是指示當前位置的游標,j是要判斷的字元的位置

*/public boolean i***ist(char arr, int i, int j)

}return false;

}/**

* 交換陣列中k1與k2位置的兩個元素

** @param arr

* @param k1

* @param k2

*/private void swap(char arr, int k1, int k2)

}

求n個字元中m個字元的組合的時候,可以把這n個字元分成兩部分:第乙個字元和其餘的所有字元。如果組合裡包含第乙個字元,則下一步在剩餘的字元裡選取m-1個字元;如果組合裡不包含第乙個字元,則下一步在剩餘的n-1個字元裡選取m個字元,從中可以看出又是個遞迴的過程。

/**

* 求字串的組合

*/public class combination

/*** 列印輸入字串包含的所有字元的所有組合

** @param str

*/public void combination(string str)

}/**

* 儲存組合的容器

*/private stackstack = new stack<>();

/*** 從begin位置開始,選取num個字元

** @param strarr

* @param begin

* @param num

*/private void combination(char strarr, int begin, int num)

if (begin >= strarr.length) else

}}

1、八皇后問題:在8*8的西洋棋上擺放八個皇后,使其任意兩個皇后不能在同一行,同一列或者同一對角線上,求符合的擺法。

2、把8個數字分別放到正方體的8個頂點上,使正方體三組相對面上的四個定點的和都相等

上述兩個問題都可以使8個數字全排列,分別進行判斷是否符合上述條件 

字串排列與組合

一 字串的排列 給定乙個字串,如何求出字串的所有排列。解題思路 字串的排列可以拆分成,第乙個字元和後面的字元進行組合而成,只需要變換第乙個字元,然後遞迴求後面的字元的排列即可,等到後面的字元為空的時候就得到一種字元的排列,下面是 實現 str 要排列的字串 pbegin 待排列的字串的起始位置,遞迴...

字串的排列與組合

字串的全排列 題目 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。分析 對於這個問題可以把字串分成兩個部分,一部分是字串的第乙個字元,另一部分是剩餘部分。即就是兩個步驟,1 求後面...

字串的全排列與組合

一 字串的排列 問題描述 給出乙個字串,請設計乙個函式輸出所有可能的排列,如abc,可能的排列順序有abc acb bac bca cba cab 問題分析 要對長度為n的序列進行排序,可以轉化為固定第乙個的值,再對剩餘的n 1個進行排序的問題,可以用遞迴實現。由於第乙個的值可以是任何乙個,可用第乙...