LC #45 JS

197 阅读1分钟

效率低下 最起码容易看得懂?将就看吧

/**
 * @param {number[]} nums
 * @return {number}
 */
var jump = function(nums) {
    let len = nums.length;
    if(len <= 1){
        return 0;
    }
    function calPossibleLastStep(index){
        let res = [];
        if(index >= len){
            return res;
        }
        if(index <= 0){
            return [0];
        }
        for(let i = index - 1; i >= 0; --i){
            if(i + nums[i] >= index){
                res.push(i);
            }
        }
        return res;
    }
    function calStepNum(lastIndex, countAlready = 0, curMin = Number.MAX_VALUE, minList = [], curList = []){
        // console.log('lastIndex:' + lastIndex + ', countAlready:' + countAlready);
        if(countAlready + 1 >= curMin){
            return curMin;
        }
        let minCount = -1;
        if(minList.some((el, index) => {
            if(el.index === lastIndex){
                minCount = el.count;
                return true;
            }
            return false;
        })){
            if(minCount > -1){
                if(minCount < countAlready + 1){
                    return curMin;
                }
            }
        }
        curList.push({
            index: lastIndex,
            count: countAlready,
        });
        let res = calPossibleLastStep(lastIndex);
        if(res.includes(0)){
            // console.log('answer:' + (countAlready + 1));
            return countAlready + 1;
        }
        else{
            if(countAlready + 1 >= curMin){
                return curMin;
            }
            let min = curMin;
            for(let i = res.length - 1; i >= 0; i--){
                let r = calStepNum(res[i], countAlready + 1, min, minList, curList);
                if(r < min){
                    minList = curList;
                    min = r;
                }
            }
            return min;
        }
    }
    let result = calStepNum(len - 1);
    return result;
};