总结 :
-
主要考察全排列算法的实现
一个数组把里面的每一个数轮流执行这个过程:把该值放在第一位,其余各个数做全排列;for(int j=i;j<arr.length;j++)
-
用选择排序算法实现字符串字典排序(可不用自己写代码,直接用Collections.sort())
字符串的按字典顺序比较大小使用compareTo()方法
题目描述:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
import java.util.ArrayList;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> result =new ArrayList<String>();
if(str==null) return result;
char [] cha = str.toCharArray();
PermutationCount(cha,0,result);
Sort(result); //按照字典顺序给字符串排序
return result;
}
public static void PermutationCount(char [] arr ,int i,ArrayList<String> list){
if(i==arr.length-1){ //递归结束条件,当指向最后一位数时,将字符串添加到ArrayList
String item = String.valueOf(arr);
if(!list.contains(item))
list.add(item);
}
else{
for(int j=i;j<arr.length;j++){ //每次递归执行完后不是回到上一层,而是执行循环直到循环结束才返回上一层!!!。
swap(arr,i,j); //将每一个数都和第0位的数交换,其余的数执行下面的代码
PermutationCount(arr,i+1,list); //剩余的数递归执行全排列
swap(arr,i,j); //这个数和第0位的数交换后还要还原回去
}
}
}
public static void swap(char [] arr,int i,int j){ //交换数组元素
char temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void Sort(ArrayList<String> res){ //选择排序把ArrayList里的字符串按字典顺序排序
for(int i=0;i<res.size()-1;i++){
int temp=i;
int j;
for(j=i+1;j<res.size();j++){
if(res.get(j).compareTo(res.get(temp))<0)//字符串的按字典顺序比较大小
temp=j;
}
String str=res.get(temp);
res.set(temp,res.get(i));
res.set(i,str);
}
}
}