一、题目
无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。
二、解题思路
使用visited[]来记录节点是否访问过,若未访问过,则进行遍历。本题在蓝桥杯字符串处理中经常遇到,可以当作模板进行背诵。
三、代码
class Solution {
List<String> list=new LinkedList<String>();
public String[] permutation(String S) {
int len=S.length();
fun(S.toCharArray(),0, new StringBuffer(),new boolean[len]);
return list.toArray(new String[list.size()]);
}
public void fun(char[] arr,int idx,StringBuffer buf,boolean[] visited) {
//寻找到一个解
if(buf.length()==arr.length) {
list.add(new String(buf.toString()));
return;
}
//枚举所有字符
for(int i=0;i<arr.length ;i++) {
if(!visited[i]) {
visited[i]=true;
buf.append(arr[i]);
fun(arr,i,buf,visited);
visited[i]=false;
buf.deleteCharAt(buf.length()-1);
}
}
}
}
四、运行结果