-
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串 abc ,则打印出由字符 a, b, c 所能排列出来的所有字符串 abc, acb, bac, bca, cab和 cba。
import java.util.ArrayList; import java.util.TreeSet; /** * Created by etf on 2018/9/12. * 输入一个字符串,按字典序打印出该字符串中字符的所有排列。 * 例如输入字符串abc,则打印出由字符a,b,c所能排列出来的 * 所有字符串abc,acb,bac,bca,cab和cba。 */ public class Solution27 { public ArrayList<String> Permutation(String str) { if (str == null || str.length() == 0) { return new ArrayList<>(); } TreeSet<String> result = new TreeSet<>(); PermutationHelper(result, str.toCharArray(), 0); return new ArrayList<>(result); } private void PermutationHelper(TreeSet<String> result, char[] chars, int temp) { if (temp == chars.length - 1) { result.add(String.valueOf(chars)); } for (int j = temp; j < chars.length; j++) { swap(j, temp, chars); PermutationHelper(result, chars, temp + 1); swap(j, temp, chars); } } private void swap(int i, int j, char[] chars) { if (i != j) { char temp = chars[j]; chars[j] = chars[i]; chars[i] = temp; } } }
转载于:https://my.oschina.net/u/3839325/blog/2050150