“`java
//递归+剪枝
class Solution {
Set res;
List selected = new ArrayList<>();
boolean[] vis;
public String[] goodsOrder(String goods) {
if (goods == null || “”.equals(goods)) {
return new String[0];
}
char[] charArr = goods.toCharArray();
res = new HashSet();
vis = new boolean[charArr.length];
dfs(charArr);
String[] result = new String[res.size()];
int i = 0;
for (String str : res) {
result[i] = str;
i++;
}
return result;
}
void dfs(char[] arr) {
if (selected.size() == arr.length) {
StringBuilder sb = new StringBuilder();
for (Character ch : selected) {
sb.append(ch);
}
String str = sb.toString();
res.add(str);
return;
}
for (int i = 0; i < arr.length; i++) {
if (vis[i]) {
continue;
}
selected.add(arr[i]);
vis[i] = true;
dfs(arr);
selected.remove(selected.size() - 1);
vis[i] = false;
}
}
class Solution {
List path;
List res;
boolean[] visited;
public String[] goodsOrder(String goods) {
res = new ArrayList<>();
path = new ArrayList<>();
char[] arr = goods.toCharArray();
class Solution:
def permutation(self, s: str) -> List[str]:
res = []
cur = []
visited = [0] * len(s)
s = sorted(s)
def backtrack():
if len(cur) == len(s):
res.append("".join(cur))
return
for i in range(len(s)):
if i != 0 and s[i] == s[i - 1] and not visited[i - 1]:
continue
if visited[i] == 1:
continue
visited[i] = 1
cur.append(s[i])
backtrack()
cur.pop()
visited[i] = 0
return
backtrack()
return res
共以下 14 个回答
“`java res; selected = new ArrayList<>();
//递归+剪枝
class Solution {
Set
List
boolean[] vis;
public String[] goodsOrder(String goods) {
if (goods == null || “”.equals(goods)) {
return new String[0];
}
char[] charArr = goods.toCharArray();
res = new HashSet();
vis = new boolean[charArr.length];
dfs(charArr);
String[] result = new String[res.size()];
int i = 0;
for (String str : res) {
result[i] = str;
i++;
}
return result;
}
}
class Solution { path; res;
List
List
boolean[] visited;
public String[] goodsOrder(String goods) {
res = new ArrayList<>();
path = new ArrayList<>();
char[] arr = goods.toCharArray();
}
递归+回溯
时间复杂度O(n^2)
空间复杂度O(n!n)
时间复杂度:O(n!n)
空间复杂度:O(n^2)
【思路】递归,做好剪枝即可
【复杂度】时间复杂度O(n!),额外空间复杂度O(n)
“`C++& result) {
void permutation(string& s, int start, vector
if (start == s.length() – 1) {
result.push_back(s);
return;
}
}
std::vector generatePermutations(std::string s) { result;
std::vector
permutation(s, 0, result);
return result;
}
“`
思路:
时间复杂度:O(n!) 空间复杂度:O(n²)
回溯
排序,判断是否重复或者使用过该字符
难
记得剪纸
复杂度O(n!)
MY