剑指offer27题字符串的排列
题目描述:
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
思路:
1.递归函数的参数,一个是当前已经排列的字符串,一个是还未排列的字符串,返回值为空
2.递归终止条件,还未参与排列的字符串长度为空
3.单层递归逻辑:for循环遍历还未参与排列的字符串,将每次循环得到的字符加入已经排列的字符串,进行下次递归
import java.util.ArrayList;
import java.util.HashMap;
public class Solution {
ArrayList<String> result = new ArrayList<>();
public ArrayList<String> Permutation(String str) {
if(str.length() == 0){
return result;
}
recur(str,"");
return result;
}
public void recur(String str, String cur){
if(str.length() == 0){
result.add(cur);
}
HashMap<String, Integer> map = new HashMap<>();
for(int i = 0; i < str.length(); i++){
if(!map.containsKey(String.valueOf(str.charAt(i)))){
map.put(String.valueOf(str.charAt(i)), 1);
recur(str.substring(0,i)+str.substring(i+1,str.length()),cur+str.charAt(i));
}
}
}
}