暴力递归+分支限界 。不知道关动态规划啥事……
字典序问题搞了个小根堆。
import java.util.*;
public class Solution {
public ArrayList<String> Permutation(String str) {
ArrayList<String> result=new ArrayList<String>();
PriorityQueue<String> queue=new PriorityQueue<>(16);
process(str.toCharArray(),queue,0);
while (!queue.isEmpty()){
result.add(queue.poll());
}
return result;
}
//子序列 暴力递归写法
// index-length 位置所有排列
public void process(char[] str,PriorityQueue<String> res,int index){
if(index==str.length){
res.add(String.valueOf(str));
return;
}
//分支限界
boolean[] visit=new boolean[26];
for(int i=index;i<str.length;i++){
if(!visit[str[i]-'a']){
visit[str[i]-'a']=true;
swap(str,i,index);
process(str,res,index+1);
swap(str,i,index);
}
}
}
public void swap(char[] arr,int i,int j){
char tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
}
京公网安备 11010502036488号