本文共 1367 字,大约阅读时间需要 4 分钟。
字符串
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串 abc,则按字典序打印出由字符 a,b,c 所能排列出来的所有字符串 abc,acb,bac,bca,cab 和 cba。
要求字符串的全排列,可以看成两步:
显然这是典型的递归思路,递归出口就是对最后一个字符固定的时候。
public class Solution { ArrayListresult = new ArrayList<>(); /** * 返回字符串的全排序结果 * @param str * @return */ public ArrayList permutation(String str) { // 字符串为空时 if (str == null || str.length() == 0) { return result; } permutation(str.toCharArray(), 0); // 从小到大排序 Collections.sort(result); return result; } public void permutation(char[] str, int begin) { // 对最后一个字符固定的时候,退出递归 if (begin == str.length - 1) { // 去重 String s = String.valueOf(str); if (!result.contains(s)) { result.add(s); } } else { for (int i = begin; i < str.length; i++) { // 求所有可能出现在第一个位置的字符 swap(str, begin, i); // 求后面所有字符的排列 permutation(str, begin + 1); // 还原 swap(str, begin, i); } } } public void swap(char[] str, int i, int j) { char temp = str[i]; str[i] = str[j]; str[j] = temp; }}
转载地址:http://abjvb.baihongyu.com/