在力扣中有一类组合问题的变式,它要求返回的果实不再是每一个树层都是一个,而是前面的和。
比如分割回文串,复原ip地址,子集问题。这一类题只需抓住path增加时不再是填加一个元素,而是数组再展开
代码:
/**
* @param {string} s
* @return {string[][]}
*/
var partition = function(s) {
function isPalindrome(s,l,r){
while(l<r){
if(s[l++]!=s[r--]) return false
}
return true
}
let res=[],path=[]
backtracking(0)
return res
function backtracking(startindex){
if(startindex>=s.length){
res.push([...path])
return
}
for(let i=startindex;i<s.length;i++){
if(!isPalindrome(s,startindex,i)) continue//若树结构第一个不是回文,就没必要再往下进行
path.push(s.slice(startindex,i+1))//问题关键:添加的是数组并且是前面的和
backtracking(i+1)
path.pop()
}
}
};