1. 程式人生 > >劍指offer第二版面試題38:字串的排列(java)

劍指offer第二版面試題38:字串的排列(java)

題目描述:
輸入一個字串,打印出該字串中字元的所有排列。
例如輸入字串abc,則列印由字元a,b,c所能排列出來的所有字串:abc,acb,bac,bca,cab,cba

分析:
我們求整個字串的排列,可以看成兩步:首先求出所有可能出現在第一個位置的字元,即把第一個字元和後面所有的字元交換。第二步固定第一個字元,求後面所有字元的排列。這個時候我們仍把後面的所有字元分成兩部分:後面字元的第一個字元,以及這個字元之後的所有字元。然後把第一個字元逐一和它後面的字元交換。

程式碼如下:

/**
 * 字串的排列 前提:字串中的每個字元都是不相同的
 */
public class StringPermutation
{
public static void main(String[] args) { String str = "abcd"; char[] arr = str.toCharArray(); permutation(arr, 0); } public static void permutation(char[] arr, int begin) { if (begin == arr.length - 1) { String result = new String(arr); System.out.println(result); } else
{ for (int i = begin; i < arr.length; i++) { swap(arr, begin, i); permutation(arr, begin + 1); swap(arr, begin, i); } } } public static void swap(char[] arr, int index1, int index2) { char temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp; } }