效率低下 最起码容易看得懂?将就看吧
/**
* @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;
};