课程地址:http://icourse8.com/linux_yingyong.html
/**
* @param {number[]} nums
* @return {number[]}
*/
function getLargestDivisibleSubSet(end,nums,memo) {
if(memo[end]) {
return memo[end];
}
if(nums.length===0) {
return [];
}
if(end===0) {
return [nums[0]];
}
const targetNum=nums[end];
let ret=[];
let maxLen=0;
for(let i=end-1;i>=0;i--) {
const tempResult=getLargestDivisibleSubSet(i,nums,memo);
if(tempResult.every(n=>targetNum%n===0) && tempResult.length>maxLen) {
ret=tempResult;
maxLen=tempResult.length;
}
}
ret.push(targetNum);
memo[end]=ret.slice();
return ret;
}
var largestDivisibleSubset = function(nums) {
nums.sort((a,b)=>a-b);
// console.log(nums);
const memo=new Array(nums.length).fill(null);
let ret=[];
let maxLen=0;
for(let i=0;i<nums.length;i++) {
const result=getLargestDivisibleSubSet(i,nums,memo);
if(maxLen<result.length) {
maxLen=result.length;
ret=result;
}
}
return ret;
};