有一道题: 你是一个盗窃专家,某一天晚上你要去盗窃某一条街道的一排房子。这些房子都有相连的防盗系统,如果你把相邻的两家都偷了那么就会触发报警器。
用一个数组来表示这些房子的金钱数量,请你完成 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(){}()的用法,我貌似有些混乱了。对这个答案的逻辑不是很明白,有谁可以帮忙讲解下吗,谢谢
