题目
思路
回溯法,注意传入cnt参数的时候放对加号的位置
可参考131. 分割回文串 (回溯)
代码
这是一段用时十分离谱的代码,建议
/**
* @param {string} s
* @return {string[]}
*/
var restoreIpAddresses = function(s) {
let ans = [];
let cur = [];
back(0,0);
return ans;
//回溯算法
function back(start, cnt){
if(cnt > 4) return;//要注意题目里面的要求“正好是4”
if(cnt === 4 && start === s.length){
ans.push(cur.join("."));
return;
}
for(let end = start + 1; end < s.length + 1; end++){
let sub = s.slice(start,end);
if (isValid(sub)){
cur.push(sub);
}else continue;
back(end,++cnt);//注意这个地方必须是++cnt不能是cnt++
cur.pop();
cnt--;
}
}
//用一个函数判断是不是有效的str
function isValid(str){
if(+str < 0 || +str >255 || str.length!= 1 && +str[0]===0){
return false;
}
return true;
}
};