题目的实质是全排列问题求解,
首先是对题目要求编写相应的转换函数。
//数组转换为字符串
public String change(char[] a){
StringBuffer res = new StringBuffer();
for(char linkString : a){
res.append(linkString);
}
return res.toString();//返回数组
}其次是字符串数组转换为集合
//字符串转换为数组
char[] a =str.toCharArray();//转换为字符串数组
ArrayList<String> ans = new ArrayList<String>();
sovle(ans,a,0,str.length());核心代码函数:
private void sovle(ArrayList<String> ans, char[] a, int i, int length) {
// TODO Auto-generated method stub
if(i == length-1){
String resString = change(a);
ans.add(resString);
}else{//index不在最后一个位置
for(int j = i;j<length;j++){
char temp = a[i];
a[i] = a[j];
a[j] = temp;
//进行下一个字符的交换
sovle(ans,a,i+1,length);
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}全部代码:
import java.util.*;
public class Solution {
public ArrayList<String> Permutation(String str) {
//字符串转换为数组
char[] a =str.toCharArray();//转换为字符串数组
ArrayList<String> ans = new ArrayList<String>();
sovle(ans,a,0,str.length());
//定义一个set进行重复数值排序去重
ans = new ArrayList<String>(new HashSet<String>(ans));
Collections.sort(ans);
return ans;
}
//数组转换为字符串
public static String change(char[] a){
StringBuffer res = new StringBuffer();
for(char linkString : a){
res.append(linkString);
}
return res.toString();//返回数组
}
public static void sovle(ArrayList<String> ans, char[] a, int index, int length) {
// TODO Auto-generated method stub
if(index == length-1){
String resString = change(a);
ans.add(resString);
}else{//index不在最后一个位置
for(int i = index;i<length;i++){
char temp = a[i];
a[i] = a[index];
a[index] = temp;
//进行下一个字符的交换
sovle(ans,a,index+1,length);
temp = a[i];
a[i] = a[index];
a[index] = temp;
}
}
}
}
京公网安备 11010502036488号