前端算法系列-回溯03

54 阅读1分钟

93. 复原 IP 地址

var isHefa = function(s,start,end,pathLen) {
    let strLen = end - start + 1
    let str = s.slice(start,end+1)
    if(strLen > 1 && s[start] === '0'){
        return false
    }else if(Number(str) > 255){
        return false
    }
    return true
}

var restoreIpAddresses = function(s) {
    let result = []
    let path = []
    let fn = (index) => {
        if(path.length > 4) return
        if(path.length === 4 && index === s.length){
            result.push([...path].join('.'))
            return 
        }
        for(let i=index;i<s.length;i++){
            if(!isHefa(s,index,i,path.length)) break
            path.push(s.slice(index,i+1))
            fn(i+1)
            path.pop()
        }
    }
    fn(0)
    return result
};

78. 子集

var subsets = function(nums) {
    let result = []
    let path = []
    let fn = (index) => {    
        result.push([...path])
        for(let i=index;i<nums.length;i++){
            path.push(nums[i])
            fn(i+1)
            path.pop()
        }
    }
    fn(0)
    return result
};

90. 子集 II

var subsetsWithDup = function(nums) {
    let numArr = nums.sort((a,b) => a - b)
    let result = []
    let path = []
    let fn = (index) => {
        result.push([...path])
        for(let i=index;i<numArr.length;i++){
            if(i>index && numArr[i] === numArr[i-1]) continue;
            path.push(numArr[i])
            fn(i+1)
            path.pop()
        }
    }   
    fn(0)
    return result
};