有一道题: 你是一个盗窃专家,某一天晚上你要去盗窃某一条街道的一排房子。这些房子都有相连的防盗系统,如果你把相邻的两家都偷了那么就会触发报警器。
用一个数组来表示这些房子的金钱数量,请你完成 rob 函数,计算出在不触发报警器的情况下最多能偷多少钱。例如: rob([1, 2, 3]) // => 4
答案: const rob = ((memo) => { const _rob = (nums)=>{
let n = nums.length
if(!n) return 0
if(!memo[n-1]){
console.log(nums.slice(0, -1), nums.slice(0, -2), nums[n - 1],nums);
if(n===1) memo[0] = nums[0]
else if(n===2) memo[1] = Math.max(nums[0],nums[1])
else memo[n-1]
= Math.max(_rob(nums.slice(0,-1)), _rob(nums.slice(0,-2))+nums[n-1])
console.log(memo);
}
return memo[n-1]
}
return _rob
})([]);
console.log(rob([1,3,7,3,2,9,10,1]));//20
对于 function(){}()的用法,我貌似有些混乱了。对这个答案的逻辑不是很明白,有谁可以帮忙讲解下吗,谢谢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.