File tree Expand file tree Collapse file tree 5 files changed +137
-1
lines changed
lcof2/剑指 Offer II 089. 房屋偷盗 Expand file tree Collapse file tree 5 files changed +137
-1
lines changed Original file line number Diff line number Diff line change 44
44
45
45
<!-- 这里可写通用的实现逻辑 -->
46
46
47
+ 简单动态规划,用 ` dp[i] ` 表示 ` 0 ~ i ` 的房子能偷到的最高金额
48
+
47
49
<!-- tabs:start -->
48
50
49
51
### ** Python3**
50
52
51
53
<!-- 这里可写当前语言的特殊实现逻辑 -->
52
54
53
55
``` python
54
-
56
+ class Solution :
57
+ def rob (self , nums : List[int ]) -> int :
58
+ if len (nums) == 1 :
59
+ return nums[0 ]
60
+
61
+ n = len (nums)
62
+ dp = [0 ] * n
63
+ dp[0 ], dp[1 ] = nums[0 ], max (nums[0 ], nums[1 ])
64
+ for i in range (2 , n):
65
+ dp[i] = max (dp[i - 2 ] + nums[i], dp[i - 1 ])
66
+ return dp[n - 1 ]
55
67
```
56
68
57
69
### ** Java**
58
70
59
71
<!-- 这里可写当前语言的特殊实现逻辑 -->
60
72
61
73
``` java
74
+ class Solution {
75
+ public int rob (int [] nums ) {
76
+ if (nums. length == 1 ) {
77
+ return nums[0 ];
78
+ }
79
+ int n = nums. length;
80
+ int [] dp = new int [n];
81
+ dp[0 ] = nums[0 ];
82
+ dp[1 ] = Math . max(nums[0 ], nums[1 ]);
83
+ for (int i = 2 ; i < n; i++ ) {
84
+ dp[i] = Math . max(dp[i - 2 ] + nums[i], dp[i - 1 ]);
85
+ }
86
+ return dp[n - 1 ];
87
+ }
88
+ }
89
+ ```
90
+
91
+ ### ** C++**
92
+
93
+ ``` cpp
94
+ class Solution {
95
+ public:
96
+ int rob(vector<int >& nums) {
97
+ if (nums.size() == 1) {
98
+ return nums[ 0] ;
99
+ }
100
+ int n = nums.size();
101
+ vector<int > dp(n, 0);
102
+ dp[ 0] = nums[ 0] ;
103
+ dp[ 1] = max(nums[ 0] , nums[ 1] );
104
+ for (int i = 2; i < n; i++) {
105
+ dp[ i] = max(dp[ i - 2] + nums[ i] , dp[ i - 1] );
106
+ }
107
+ return dp[ n - 1] ;
108
+ }
109
+ };
110
+ ```
62
111
112
+ ### **Go**
113
+
114
+ ```go
115
+ func rob(nums []int) int {
116
+ if len(nums) == 1 {
117
+ return nums[0]
118
+ }
119
+
120
+ n := len(nums)
121
+ dp := make([]int, n)
122
+ dp[0] = nums[0]
123
+ dp[1] = max(nums[0], nums[1])
124
+ for i := 2; i < n; i++ {
125
+ dp[i] = max(dp[i-2]+nums[i], dp[i-1])
126
+ }
127
+ return dp[n-1]
128
+ }
129
+
130
+ func max(x, y int) int {
131
+ if x > y {
132
+ return x
133
+ }
134
+ return y
135
+ }
63
136
```
64
137
65
138
### ** ...**
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ int rob (vector<int >& nums) {
4
+ if (nums.size () == 1 ) {
5
+ return nums[0 ];
6
+ }
7
+ int n = nums.size ();
8
+ vector<int > dp (n, 0 );
9
+ dp[0 ] = nums[0 ];
10
+ dp[1 ] = max (nums[0 ], nums[1 ]);
11
+ for (int i = 2 ; i < n; i++) {
12
+ dp[i] = max (dp[i - 2 ] + nums[i], dp[i - 1 ]);
13
+ }
14
+ return dp[n - 1 ];
15
+ }
16
+ };
Original file line number Diff line number Diff line change
1
+ func rob (nums []int ) int {
2
+ if len (nums ) == 1 {
3
+ return nums [0 ]
4
+ }
5
+
6
+ n := len (nums )
7
+ dp := make ([]int , n )
8
+ dp [0 ] = nums [0 ]
9
+ dp [1 ] = max (nums [0 ], nums [1 ])
10
+ for i := 2 ; i < n ; i ++ {
11
+ dp [i ] = max (dp [i - 2 ]+ nums [i ], dp [i - 1 ])
12
+ }
13
+ return dp [n - 1 ]
14
+ }
15
+
16
+ func max (x , y int ) int {
17
+ if x > y {
18
+ return x
19
+ }
20
+ return y
21
+ }
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int rob (int [] nums ) {
3
+ if (nums .length == 1 ) {
4
+ return nums [0 ];
5
+ }
6
+ int n = nums .length ;
7
+ int [] dp = new int [n ];
8
+ dp [0 ] = nums [0 ];
9
+ dp [1 ] = Math .max (nums [0 ], nums [1 ]);
10
+ for (int i = 2 ; i < n ; i ++) {
11
+ dp [i ] = Math .max (dp [i - 2 ] + nums [i ], dp [i - 1 ]);
12
+ }
13
+ return dp [n - 1 ];
14
+ }
15
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def rob (self , nums : List [int ]) -> int :
3
+ if len (nums ) == 1 :
4
+ return nums [0 ]
5
+
6
+ n = len (nums )
7
+ dp = [0 ] * n
8
+ dp [0 ], dp [1 ] = nums [0 ], max (nums [0 ], nums [1 ])
9
+ for i in range (2 , n ):
10
+ dp [i ] = max (dp [i - 2 ] + nums [i ], dp [i - 1 ])
11
+ return dp [n - 1 ]
You can’t perform that action at this time.
0 commit comments