暴力递归+分支限界 。不知道关动态规划啥事……
字典序问题搞了个小根堆。
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; } }