題目:輸入一個字符串,打印出該字符串中字符的所有的排列。例如輸入字符串abc,則打印出由字符a、b、c所能排列出來的所有字符串。
解題思路:把字符串分爲兩部分,一部分是字符串的第一個字符,另一部分是第一個字符以後的所有字符。接下來求第一個字符以後的所有字符的排列。拿第一個字符和它後面的字符串逐個交換。
C#實現:
public static void Permutation(char[] pStr) { if (pStr == null) return; int begin = 0; Permutation(pStr, begin); } private static void Permutation(char[] pStr, int begin) { if (begin == pStr.Length) Console.WriteLine(pStr); else { for (int i = begin; i < pStr.Length; i++) { char temp = pStr[i]; pStr[i] = pStr[begin]; pStr[begin] = temp; Permutation(pStr, begin + 1); temp = pStr[i]; pStr[i] = pStr[begin]; pStr[begin] = temp; } } }
Java實現:
public static void permutation(char[] pStr) { if (pStr == null) return; int begin = 0; permutation(pStr, begin); } private static void permutation(char[] pStr, int begin) { if (begin == pStr.length) System.out.println(pStr); else { for (int i = begin; i < pStr.length; i++) { char temp = pStr[i]; pStr[i] = pStr[begin]; pStr[begin] = temp; permutation(pStr, begin + 1); temp = pStr[i]; pStr[i] = pStr[begin]; pStr[begin] = temp; } } }
Python實現:
def permutation(pStr): if pStr == None: return begin = 0 permutation_child(pStr, begin) def permutation_child(pStr, begin): if begin == len(pStr): print(pStr) else: for i in range(begin, len(pStr)): temp = pStr[i] pStr[i] = pStr[begin] pStr[begin] = temp permutation_child(pStr, begin + 1) temp = pStr[i] pStr[i] = pStr[begin] pStr[begin] = temp