[编程题]字符串的排列(Java实现)
题目来源
剑指offer第27题
https://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7?tpId=13tqId=11180rp=2ru=/ta/coding-interviewsqru=/ta/coding-interviews/question-ranking
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
题目代码
import java.util.*;
public class Solution {
public ArrayListString Permutation(String str) {
ArrayListStringlist=new ArrayListString();
if(str==null)
return list;
permutation(str.toCharArray(),0,list);
Collections.sort(list);
return list;
}
void permutation(char[] str,int index,ArrayListStringlist){
if(index==str.length-1){
if(!list.contains(String.valueOf(str)))
list.add(String.valueOf(str));
}else{
SetCharacterset=new HashSet();
for(int i=index;istr.length;i++){
if(i==index||!set.contains(str[i])){
set.add(str[i]);
swap(str,i,index);
permutation(str,index+1,list);
swap(str,i,index);
}
}
}
}
void swap(char[] str,int i,int j){
char tem=str[i];
str[i]=str[j];
str[j]=tem;
}
}