动态规划相关 337. House Robber 198 213

动态规划相关的题目:198. House Robber 和213. House Robber II都可以使用动态规划的方法

337. House Robber III的结构为树,不太方便用动态规划,有多种解法:

1:笨方法,使用递归的方法,在递归的时候尽量将代码简化即可使得不超时。

int rob(TreeNode* root)
 {
     if(root == NULL)
     {
         return 0;
     }
     if(root->left == NULL && root->right == NULL)
     {
         return root->val;
     }
     int max = rob(root->left)+rob(root->right);
     int m = root->val;
     if(root->left)
        m+=(rob(root->left->left) + rob(root->left->right));
     if(root->right)
        m+=(rob(root->right->left) + rob(root->right->right));
     return max>m?max:m;
 }

2.升级的递归法(添加一个map来记录已经计算过的子树的值)

3.动态规划法(nrMax表示不抢劫根节点的最大值,rMax表示抢劫根节点的最大值)

void recVisit(TreeNode* root, int &nrMax, int &rMax)  

{  

int lrMax=0, lnrMax=0, rrMax=0, rnrMax=0;  

if(root){  

recVisit(root->left, lnrMax, lrMax); 

recVisit(root->right, rnrMax, rrMax);

nrMax = max(lnrMax, lrMax) + max(rrMax, rnrMax);

rMax = root->val + lnrMax + rnrMax;  

}  

}

int rob(TreeNode* root) {

int rMax=0, res=0;

recVisit(root, nrMax, rMax);

return max(nrMax, rMax);

}



你可能感兴趣的:(随笔,leetcode)