尝试一
result:答案正确:恭喜!您提交的程序通过了所有的测试用例
code:
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
ArrayList<String> cases=new ArrayList<>();
public ArrayList<String> Permutation(String str) {
cases=new ArrayList<>();
if("".equals(str) || str==null){
return cases;
}
char[] cs= str.toCharArray();
Arrays.sort(cs);
build(cs,"");
return cases;
}
/**
*
*
* @param cs 剩余已排序的字母序列
* @param now 上步已经生成的str
*/
private void build(char[] cs,String now){
if(cs.length==0){
cases.add(now);
return;
}
for(int i=0;i<cs.length;++i){
/*去重*/
if(i>0){
if(cs[i]==cs[i-1]){
continue;
}
}
//得到去掉指定i元素的数组。
char[] trigger=new char[cs.length-1];
System.arraycopy(cs,0,trigger,0,i);
if(i<cs.length-1) {
System.arraycopy(cs, i + 1, trigger, i, cs.length - i - 1);
}
String temp=new String(now+cs[i]);
build(trigger,temp);
}
}
}
分析:循环中套递归。不停尝试。
结论
- Arrays.sort(T [])可以对数组进行自然排序。
- 循环中套递归也未尝不可。