题目
题目链接:https://leetcode-cn.com/problems/permutation-i-lcci/
题目解析:
主要是用回溯方法递归调用,拿adc举例。
用递归将切割下来的字符串和已经添加的字符串,继续操作。
代码
class Solution {
//创建list集合,用来存放答案
List<String> list=new ArrayList<>();
//主函数
public String[] permutation(String S) {
//递归函数,将S和空字串传过去
go(S,"");
//创建答案字符串数组
String[] s = new String[list.size()];
for(int i=0;i<list.size();i++)
s[i] = list.get(i);
return s;
}
//递归函数
private void go(String s, String str) {
//如果字符串为空或者字符串剩下一个字符时,将答案放入list集合中并返回
if(s.equals("")||s.length()==1) {
//System.out.println(s+" "+str);
list.add(str+s);
//System.out.println(list);
//System.out.println("----");
return;
}else {
//s3将str变为不变的字符串,防止修改
final String s3 = str;
for(int i=0;i<s.length();i++) {
//创建Stringbuffer对象来连接答案字符串
StringBuffer sb = new StringBuffer(s3);
//System.out.println(sb.toString());
sb.append(s.charAt(i));
//删除s中已经被添加的字符
String s2 = s.replaceAll(s.charAt(i)+"", "");
//System.out.println(s2+" "+sb.toString());
//继续递归
go(s2,sb.toString());
}
}
return;
}
}