//防止有重复的字母 HashSet<String> stringArrayList = new HashSet<>();
public String[] permutation(String s) { dfs(s, 0, new StringBuffer(), new HashSet<>()); String[] result = new String[stringArrayList.size()]; return stringArrayList.toArray(result); }
publicvoiddfs(String s, int cur, StringBuffer stringBuffer, HashSet<Integer> visited){
//走到最后一个了,添加 if (cur == s.length()) { stringArrayList.add(stringBuffer.toString()); return; }
//每一层都尝试一下所有字母 //类别二叉树,可以区分左右。先左后右。所以这里重试所有的字母 for (int i = 0; i < s.length(); i++) {
//如果前面一层这个字母,被访问过了,就只能选下一个 if (visited.contains(i)) { continue; }
//标记访问 visited.add(i);
//添加进去,开始进入下一层 stringBuffer.append(s.charAt(i)); dfs(s, cur + 1, stringBuffer, visited);