字符串的排列

    題目:輸入一個字符串,打印出該字符串中字符的所有的排列。例如輸入字符串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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章