输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

mac2024-04-08  26

本题我们首先想到的就是递归方式解答,我们先把输入的字符串转为字符数组,然后固定第一位数交换除第一位数的其他位数,两两交换,把每组交换过后的字符串与集合中其他交换遍历生成的字符串进行比较,不相同则放入集合,然后交换一二位,重复进行递归遍历,直到第一个数与最后一个数交换结束,把所有字符串按照字母排序输出

下面我们看一下例子:

import java.util.ArrayList; import java.util.Collections; public class Solution { public ArrayList<String> Permutation(String str) { ArrayList<String> sortList = new ArrayList<String>(); char[] ch = str.toCharArray(); SortRecursion(ch, 0, sortList); Collections.sort(sortList); return sortList; } public void SortRecursion(char[] str, int i, ArrayList<String> list) { if (str == null) { return; } if (i == str.length - 1) { if(list.contains(String.valueOf(str))){ return; } list.add(String.valueOf(str)); } else { boolean num=true; for (int j = i; j < str.length; j++) { char temp = str[j]; str[j] = str[i]; str[i] = temp; SortRecursion(str, i + 1, list); temp = str[j]; str[j] = str[i]; str[i] = temp; } } } }
最新回复(0)