Espada se refiere a la oferta 38. Arreglo de cuerdas
Descripción del Título
Ideas para resolver problemas
-
Dado que puede haber permutaciones completas repetidas en res, como la permutación completa de aab, habrá repeticiones, por lo que res necesita usar HashSet para eliminar la duplicación .
-
Si encuentra el retroceso de una cadena y necesita implementar la función de contiene (es decir, para evitar el acceso repetido a los caracteres), puede usar la matriz visitada para marcar la visita.
-
El método para convertir la matriz de cadenas ArrayList (o LinkedList, HashSet, etc.) en una matriz de cadenas :
ArrayList<String> src = new ArrayList<String>(); String[] target = src.toArray(new String[src.size()])
-
El método de longitud de String es
str.length()
, nostr.size()
class Solution {
Set<String> res = new HashSet<>();
public String[] permutation(String s) {
String track = ""; //记录路径
boolean[] visited = new boolean[s.length()]; //防止重复访问字符
char[] str = s.toCharArray();
backtrack(str, track, visited);
//将字符串数组ArrayList转化为String类型数组
return res.toArray(new String[res.size()]);
}
public void backtrack(char[] str, String track, boolean[] visited) {
if (track.length() == str.length) {
res.add(new String(track));
return;
}
for (int i = 0; i < str.length; i++) {
//跳过重复字符
if (visited[i]) continue;
visited[i] = true;
backtrack(str, track + str[i], visited);
visited[i] = false;
}
}
}