var generateParenthesis = function(n) {
const res=[]
const dfs=(cur,left,right)=>{
if(left>n || right>left){
return
}
if(cur.length===n*2){
res.push(cur)
return
}
dfs(cur+'(',left+1,right)
dfs(cur+')',left,right+1)
}
dfs('',0,0)
return res
};
var partition = function(s) {
let res=[]
let path=[]
const dfs=(idx)=>{
if(idx===s.length){
res.push([...path])
return
}
let cur=''
for(let i=idx;i<s.length;i++){
cur+=s[i]
if(cur!=cur.split('').reverse().join(''))continue
path.push(cur)
dfs(i+1)
path.pop()
}
}
dfs(0)
return res
};
var restoreIpAddresses = function(s) {
const res=[]
if(s.length>12 ||s.length<4)return res
const path=[]
const dfs=(idx)=>{
if(path.length>4)return
if(path.length===4 && idx===s.length){
res.push(path.join('.'))
return
}
let cur=''
for(let i=idx;i<s.length;i++){
cur+=s[i]
if(Number(cur)>=0 && Number(cur)<=255 && (cur[0]!=='0' || cur==='0')){
path.push(cur)
dfs(i+1)
path.pop()
}
}
}
dfs(0)
return res
};