class Solution { public String[] permutation(String S) { //如果长度为0 if (S.length() == 0) return new String[0]; //定义答案 List<String> res = new ArrayList<>(); //把String类型转化为字符数组 char[] s = S.toCharArray(); //定义i一个数组来标识是否已经选取 boolean[] mark = new boolean[s.length]; //回溯 res=dfs(s, mark, "", res); String [] ret=new String[res.size()]; return res.toArray(ret); } private List<String> dfs(char[] s, boolean[] mark, String tmp, List<String> res) { //如果当前选定的数组长度与给定的数组长度相等,说明已经选完了,可以退出了 if (tmp.length() == s.length) { res.add(tmp); return res; } //遍历字符数组找有没有没被选中的 for (int i=0;i<s.length;i++){ //如果当前字符没被选中 if (!mark[i]){ //将当前字符表记为选中 mark[i]=true; //将该字符加入tmp字符,开始回溯继续找 res=dfs(s,mark,tmp+s[i],res); //退回 mark[i]=false; } } return res; } }
结果