var combinationSum = function(candidates, target) {
let ans=[]
const dfs=(target,res,idx)=>{
if(idx===candidates.length){
return
}
if(target===0){
ans.push(res)
return
}
dfs(target,res,idx+1)
if(target-candidates[idx]>=0){
dfs(target-candidates[idx],[...res,candidates[idx]],idx)
}
}
dfs(target,[],0)
return ans
};
var combinationSum2 = function(candidates, target) {
let ans=[]
candidates.sort((a,b)=>a-b)
const dfs=(idx,res,sum)=>{
if(sum===target){
ans.push([...res])
return
}
for(let i=idx;i<candidates.length;i++){
if(sum+candidates[i]>target){
break
}
if(i>idx && candidates[i]===candidates[i-1]){
continue
}
res.push(candidates[i])
dfs(i+1,res,sum+candidates[i])
res.pop()
}
}
dfs(0,[],0)
return ans
};
var permute = function(nums) {
let res=[]
const dfs=(idx,ans)=>{
if(idx===nums.length){
res.push(ans)
return
}
for(let i of nums){
if(ans.indexOf(i)!=-1)continue
let cur=[...ans,i]
dfs(idx+1,cur)
}
}
dfs(0,[])
return res
};
var permuteUnique = function(nums) {
let res=[]
const dfs=(arr,count)=>{
if(count===nums.length){
res.push(arr.map(i=>nums[i]))
return
}
const visited=new Set
for(let i=0
if(arr.includes(i) || visited.has(nums[i]))continue
visited.add(nums[i])
arr.push(i)
dfs(arr,count+1)
arr.pop()
}
}
dfs([],0)
return res
}