代码随想录算法训练营第二十四天| 93.复原IP地址 、 78.子集 、 90.子集II

36 阅读1分钟

93.复原IP地址

相关链接:题目链接文章讲解 视频讲解

解题思路

代码实现

var restoreIpAddresses = function(s) {
    var result =[];
    var path =[];
    var backtracking= function(s,sIndex){
        if(sIndex>= s.length &&path.length===4){
            result.push(path.join('.'));
            return;
        }
        for(let i=sIndex;i<=s.length;i++){
            var str = s.substring(sIndex,i);
            if(str.length>0 && (/^[0-9]+$/.test(str)) && ((str-0 ===0 && str.length===1) ||(str.indexOf('0')!==0 &&(str-0<=255)))){
                path.push(str);
                backtracking(s,i);
                path.pop();
            }
        }
    }
    backtracking(s,0);
    return result;
};

78.子集

相关链接:题目链接文章讲解 视频讲解

解题思路

代码实现

var subsets = function(nums) {
    var result =[[]];
    var path =[];
    var backtracking = function(nums,sIndex){
        if(path.length === nums.length){
            return result;
        }
        for(let i=sIndex;i<nums.length;i++){
            path.push(nums[i]);
            result.push([...path]);
            backtracking(nums,i+1);
            path.pop();
        }
    }
    backtracking(nums,0)
    return result;
};

90.子集II

相关链接:题目链接文章讲解 视频讲解

解题思路

代码实现

var subsetsWithDup = function(nums) {
    var result =[[]];
    var path =[];
    nums.sort((a, b) => {
        return a - b
    })
    var backtracking = function(nums,sindex){
        if(path.length === nums.length){
            return;
        }
        for(let i = sindex; i< nums.length; i++){
           

           if(i > sindex && nums[i] === nums[i - 1]) {
                continue
            }
            path.push(nums[i]);
            result.push([...path])
            backtracking(nums,i+1);
            path.pop();
        }
    }
    backtracking(nums,0);
    return result;
};