求字串的排列可以把字串看成兩部分:第一部分為它的第乙個字元,第二部分是後面的所有字元。
求字串的全排列的時候,可以用兩步完成:首先求所有可能出現在第乙個位置的字元,即把第乙個字元與後面的所有字元交換。第二步固定第乙個字元,求後面所有字元的排列。從中可以看出是典型的遞迴思路。
/**
* 字串的全排列
*/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個進行排序的問題,可以用遞迴實現。由於第乙個的值可以是任何乙個,可用第乙...