leetcode 打家劫舍系列

2021-10-05 23:20:58 字數 2720 閱讀 5671

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。

給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。

輸入: [1,2,3,1]

輸出: 4

解釋: 偷竊 1 號房屋 (金額 = 1) ,然後偷竊 3 號房屋 (金額 = 3)。

偷竊到的最高金額 = 1 + 3 = 4 。

輸入: [2,7,9,3,1]

輸出: 12

解釋: 偷竊 1 號房屋 (金額 = 2), 偷竊 3 號房屋 (金額 = 9),接著偷竊 5 號房屋 (金額 = 1)。

偷竊到的最高金額 = 2 + 9 + 1 = 12 。

class solution 

if(nums.length==1)

if(nums.length==2)

//建立乙個二維陣列,第二個位置,0表示不偷,1表示偷

你是乙個專業的小偷,計畫偷竊沿街的房屋,每間房內都藏有一定的現金。這個地方所有的房屋都圍成一圈,這意味著第乙個房屋和最後乙個房屋是緊挨著的。同時,相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。

給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。

輸入: [2,3,2]

輸出: 3

解釋: 你不能先偷竊 1 號房屋(金額 = 2),然後偷竊 3 號房屋(金額 = 2), 因為他們是相鄰的。

輸入: [1,2,3,1]

輸出: 4

解釋: 你可以先偷竊 1 號房屋(金額 = 1),然後偷竊 3 號房屋(金額 = 3)。

偷竊到的最高金額 = 1 + 3 = 4 。

class solution

if(nums.length==1)

if(nums.length==2)

//建立乙個二維陣列,第二個位置,0表示不偷,1表示偷

//這道題在題目一的基礎上增加了乙個環形,那麼我們就分兩種情況進行討論

在上次打劫完一條街道之後和一圈房屋後,小偷又發現了乙個新的可行竊的地區。這個地區只有乙個入口,我們稱之為「根」。 除了「根」之外,每棟房子有且只有乙個「父「房子與之相連。一番偵察之後,聰明的小偷意識到「這個地方的所有房屋的排列類似於一棵二叉樹」。 如果兩個直接相連的房子在同一天晚上被打劫,房屋將自動報警。

計算在不觸動警報的情況下,小偷一晚能夠盜取的最高金額。

輸入: [3,2,3,null,3,null,1]

3/ \

2 3

\ \

3 1

輸出: 7

解釋: 小偷一晚能夠盜取的最高金額 = 3 + 3 + 1 = 7.

輸入: [3,4,5,1,3,null,1]

3

/ \4 5

/ \ \

1 3 1

輸出: 9

解釋: 小偷一晚能夠盜取的最高金額 = 4 + 5 = 9.

/**

* definition for a binary tree node.

* public class treenode

* }*/class solution

if(root.left==null&&root.right==null)

intnum=jisuan(root);

return math.max(num[0],num[1]);

}public intjisuan(treenode root)

intnum_root=new int[2];

//當前節點的左子樹進行判斷

intnum_left=jisuan(root.left);

//當前節點右子樹進行判斷

intnum_right=jisuan(root.right);

//num_root[0]表示不偷root這個節點,

//所以對於root的左右子樹我們可以任意選擇

num_root[0]=math.max(num_left[0],num_left[1])+

math.max(num_right[0],num_right[1]);

//如果偷root這個節點,那麼我們就不能再偷它的左右節點,

//1表示偷當前節點,0表示不偷當前節點

num_root[1]=root.val+num_left[0]+num_right[0];

return num_root;}}

leetcode常見 打家劫舍系列

leetcode 198 打家劫舍 題型 動態規劃 難度 簡單 題目 你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計...

LeetCode 打家劫舍

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...

leetcode 打家劫舍

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...