变态青蛙的延伸
字符串的排列
http://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7
/这题其实和变态青蛙的思路类似,我的思路简单粗暴,首先用递归枚举所有情况,并用集合去重,然后输出;缺点性能不是太好/
import java.util.ArrayList;
import java.util.Set;
import java.util.TreeSet;
public class Solution {
Set<string> list=new TreeSet<string>();//集合用来去重
ArrayList<string> result=new ArrayList<string>();
StringBuffer s =new StringBuffer();
public ArrayList<string> Permutation(String str) {
if(str.length()==0) return result;
output(new StringBuffer(str));
result.addAll(list);
return result;//return result.addAll(list);return void 错误;
}
public void output(StringBuffer str){//枚举所有情况,并用集合去重
for(int i=0;i<str.length();i++){
StringBuffer str1=new StringBuffer(str.toString());
s.append(str1.charAt(i));
str1.deleteCharAt(i);
output(str1);
s.deleteCharAt(s.length()-1);//往上层回溯时,清洗当前层添加的数据
}
if(str.length()==0)list.add(s.toString());//排到最后时,记录到list
}
}</string></string></string></string></string>