字符串的排列–java–回溯
思路:
这道题一看就是一道典型的回溯问题,求出给定字符串的所有排列。相对于求所有子集的问题,这道题只需要求出长度为原始字符串长度的子集即可。直接利用dfs模板来做。
代码:
class Solution {
private Set<String> res = new HashSet<>();
public String[] permutation(String s) {
List<Character> list = new ArrayList<Character>();
for( char ch : s.toCharArray() ){
list.add(ch);
}
dfs("",list);
return res.toArray(new String[res.size()]);
}
// dfs
// alreadyList为以选择列表,waitList为待选择列表
public void dfs(String alreadyList,List<Character> waitList){
// 结束递归
if( waitList.size() == 0 ){
res.add(alreadyList);
return;
}
for( int i = 0; i < waitList.size(); ++i ){
// 做选择
char ch = waitList.remove(i);
String subStr = alreadyList + ch;
// 回溯
dfs(subStr,waitList);
// 撤销选择
waitList.add(i,ch);
}
}
}
作者:mai-jia-jun
链接:https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof/solution/zi-fu-chuan-de-pai-lie-by-mai-jia-jun-fjxi/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。