var isHefa = function(s,start,end,pathLen) {
let strLen = end - start + 1
let str = s.slice(start,end+1)
if(strLen > 1 && s[start] === '0'){
return false
}else if(Number(str) > 255){
return false
}
return true
}
var restoreIpAddresses = function(s) {
let result = []
let path = []
let fn = (index) => {
if(path.length > 4) return
if(path.length === 4 && index === s.length){
result.push([...path].join('.'))
return
}
for(let i=index;i<s.length;i++){
if(!isHefa(s,index,i,path.length)) break
path.push(s.slice(index,i+1))
fn(i+1)
path.pop()
}
}
fn(0)
return result
};
var subsets = function(nums) {
let result = []
let path = []
let fn = (index) => {
result.push([...path])
for(let i=index;i<nums.length;i++){
path.push(nums[i])
fn(i+1)
path.pop()
}
}
fn(0)
return result
};
var subsetsWithDup = function(nums) {
let numArr = nums.sort((a,b) => a - b)
let result = []
let path = []
let fn = (index) => {
result.push([...path])
for(let i=index;i<numArr.length;i++){
if(i>index && numArr[i] === numArr[i-1]) continue;
path.push(numArr[i])
fn(i+1)
path.pop()
}
}
fn(0)
return result
};