class Solution {
List ans =new ArrayList<>();
public String[] goodsOrder(String goods) {
Boolean[] visited = new Boolean[goods.length()];
for(int i = 0; i < goods.length();i++)
visited[i] = false;
dfs(visited,goods.length(),new StringBuilder(),goods);
return ans.toArray(new String[goods.length()]);
共以下 9 个回答
List<List> res=new LinkedList<>(); ans =new ArrayList<>(); > pathTarget(TreeNode root, int target) {
List
void backtracking(TreeNode root,int tar) {
if(root null) return ;
ans.add(root.val);
tar-=root.val;
if (tar0&&root.leftnull &&root.rightnull) {
res.add(new ArrayList(ans));
}
backtracking(root.left,tar);
backtracking(root.right,tar);
ans.removeLast();
}
public List<List
backtracking(root,target);
return res;
}
思路:回溯模版
时间复杂度:O(n!n) 空间复杂度:O(n^2)
打卡
时间复杂度:O(n * n!)
空间复杂度:O(n)
思路:回溯,每次交换当前位和string后续任一位置的值,如果该值已经被交换过了(即存在重复值),则跳过。在回溯算法中用一个变量记录当前所在位。
“`c++ goodsOrder(string goods) { ans; used;
class Solution {
public:
vector
dfs(goods, 0);
return ans;
}
private:
vector
void dfs(string goods, int t) {
if (t == goods.size()-1) {
ans.push_back(goods);
return;
}
set
for (int i=t; i
时间复杂度$O(n)$,空间复杂度$O(n)$
class Solution { ans = new ArrayList<>(); rec(Boolean[] isUsed,int left,String goods){ total = new ArrayList<>(); set = new HashSet<>(); temp = rec(isUsed,left – 1,goods);
public String[] goodsOrder(String goods) {
List
int sz = goods.length();
Boolean[] isUsed = new Boolean[sz];
for(int i = 0; i < sz; i++)
isUsed[i] = false;
return rec(isUsed,sz,goods).toArray(new String[sz]);
}
private List
List
HashSet
for(int i = 0; i < isUsed.length; i++){
if(!isUsed[i]){
isUsed[i] = true;
List
for(String item :temp){
set.add(goods.charAt(i) +item);
}
if(temp.size() 0)
set.add(goods.charAt(i)+””);
isUsed[i] = false;
}
}
for(String s: set)
total.add(s);
return total;
}
//由于直接操作String 导致耗时较长。若需优化可以修改为回溯Integer序列
//时间复杂度O(n*n!)
//空间复杂度O(n2)
class Solution { ans =new ArrayList<>();
List
public String[] goodsOrder(String goods) {
Boolean[] visited = new Boolean[goods.length()];
for(int i = 0; i < goods.length();i++)
visited[i] = false;
dfs(visited,goods.length(),new StringBuilder(),goods);
return ans.toArray(new String[goods.length()]);
}