1. 程式人生 > >劍指offer程式設計題(JAVA實現)——第27題:字串的排列

劍指offer程式設計題(JAVA實現)——第27題:字串的排列



github https://github.com/JasonZhangCauc/JZOffer
import java.util.ArrayList;
import java.util.Collections;


/**
 * 
 * 劍指offer程式設計題(JAVA實現)——第27題:字串的排列
 * 
 * 題目描述
 * 輸入一個字串,按字典序打印出該字串中字元的所有排列。
 * 例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。
 * 輸入描述:
 * 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。
 *
 */
public class Test27 { public static void main(String[] args) { System.out.println(Permutation("abc").toString()); } public static ArrayList<String> Permutation(String str) { ArrayList<String> list = new ArrayList<>(); if (str.length() > 0) { PermutationHelper(str.toCharArray
(), 0, list); } Collections.sort(list);// 按字典序排序 return list; } private static void PermutationHelper(char[] charArray, int i, ArrayList<String> list) { if (i == charArray.length - 1) { if (!list.contains(String.valueOf(charArray))) { list.add(String.valueOf(charArray)); } }
else { for (int j = i; j < charArray.length; j++) { swap(charArray, i, j); PermutationHelper(charArray, i + 1, list); swap(charArray, i, j);// 復原 } } } private static void swap(char[] charArray, int i, int j) { char tmp = charArray[i]; charArray[i] = charArray[j]; charArray[j] = tmp; } }