93. 复原IP地址
关键点:1.有效的子字符串的判断条件;2.终止条件里要包含当前字符串已全被切割的判断
var restoreIpAddresses = function(s) {
const res = [];
const backtrack = (arr, start) => {
if (arr.length > 4) return;
if (arr.length === 4 && start === s.length) {
res.push([...arr].join('.'));
return;
}
for (let i=start; i<s.length; i++) {
const subStr = s.substring(start, i+1);
if(subStr.length > 3 || +subStr > 255) break;
if(subStr.length > 1 && subStr[0] === '0') break;
arr.push(subStr);
backtrack(arr, i+1);
arr.pop();
}
}
backtrack([], 0);
return res;
};
78.子集
var subsets = function(nums) {
const res = [];
const backtrack = (arr, start) => {
res.push([...arr]);
if (start >= nums.length) {
return;
}
for (let i=start; i<nums.length; i++) {
arr.push(nums[i]);
backtrack(arr, i+1);
arr.pop();
}
}
backtrack([], 0);
return res;
};
90.子集II
don't forget 去重是基于排序的
var subsetsWithDup = function(nums) {
const res = [];
nums.sort((a,b)=>a-b);
const backtrack = (arr, start) => {
res.push([...arr]);
for (let i=start; i<nums.length; i++) {
if (i > start && nums[i] === nums[i-1]) continue;
arr.push(nums[i]);
backtrack(arr, i+1);
arr.pop();
}
}
backtrack([], 0);
return res;
};