Skip to content

Commit 5d16ef9

Browse files
committed
feat: update leetcode solutions: No.0198, No.0213
1 parent 3c31246 commit 5d16ef9

16 files changed

+432
-199
lines changed

lcof/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# [《剑指 Offer(第 2 版)》系列](https://leetcode-cn.com/problemset/lcof/)
22

3+
![](./lcof.png)
4+
35
本书精选谷歌、微软等知名 IT 企业的典型面试题,系统地总结了如何在面试时写出高质量代码,如何优化代码效率,以及分析、解决难题的常用方法。
46

57
[English Version](/lcof/README_EN.md)

lcof/README_TEMPLATE.md

+12-4
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,39 @@
1-
# [题目](这里是题目链接,如:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/)
1+
# [{}. {}]({})
2+
3+
[English Version]({})
24

35
## 题目描述
46

57
<!-- 这里写题目描述 -->
68

9+
{}
10+
711
## 解法
812

913
<!-- 这里可写通用的实现逻辑 -->
1014

11-
### Python3
15+
<!-- tabs:start -->
16+
17+
### **Python3**
1218

1319
<!-- 这里可写当前语言的特殊实现逻辑 -->
1420

1521
```python
1622

1723
```
1824

19-
### Java
25+
### **Java**
2026

2127
<!-- 这里可写当前语言的特殊实现逻辑 -->
2228

2329
```java
2430

2531
```
2632

27-
### ...
33+
### **...**
2834

2935
```
3036
3137
```
38+
39+
<!-- tabs:end -->

lcof/lcof.png

18.2 KB
Loading

lcof/lcof_list.json

+1
Large diffs are not rendered by default.

solution/0100-0199/0198.House Robber/README.md

+75-17
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828

2929
<!-- 这里可写通用的实现逻辑 -->
3030

31+
动态规划法。状态转移方程:`f(n) = Math.max(f(n - 2) + nums[n], nums[n - 1])`
32+
3133
<!-- tabs:start -->
3234

3335
### **Python3**
@@ -37,16 +39,16 @@
3739
```python
3840
class Solution:
3941
def rob(self, nums: List[int]) -> int:
42+
def robRange(nums, start, end):
43+
if end - start == 0:
44+
return nums[start]
45+
pre, cur = 0, nums[start]
46+
for i in range(start + 1, end + 1):
47+
pre, cur = cur, max(pre + nums[i], cur)
48+
return cur
4049
if not nums:
4150
return 0
42-
n = len(nums)
43-
if n == 1:
44-
return nums[0]
45-
pre, cur = nums[0], max(nums[0], nums[1])
46-
for i in range(2, n):
47-
t = max(pre + nums[i], cur)
48-
pre, cur = cur, t
49-
return cur
51+
return robRange(nums, 0, len(nums) - 1)
5052
```
5153

5254
### **Java**
@@ -57,15 +59,15 @@ class Solution:
5759
class Solution {
5860
public int rob(int[] nums) {
5961
int n;
60-
if (nums == null || (n = nums.length) == 0) {
61-
return 0;
62-
}
63-
if (n == 1) {
64-
return nums[0];
65-
}
66-
int pre = nums[0];
67-
int cur = Math.max(nums[0], nums[1]);
68-
for (int i = 2; i < n; ++i) {
62+
if ((n = nums.length) == 0) return 0;
63+
return robRange(nums, 0, n - 1);
64+
}
65+
66+
private int robRange(int[] nums, int start, int end) {
67+
if (end - start == 0) return nums[start];
68+
int pre = 0;
69+
int cur = nums[start];
70+
for (int i = start + 1; i < end + 1; ++i) {
6971
int t = Math.max(pre + nums[i], cur);
7072
pre = cur;
7173
cur = t;
@@ -75,6 +77,62 @@ class Solution {
7577
}
7678
```
7779

80+
### **C++**
81+
82+
```cpp
83+
class Solution {
84+
public:
85+
int rob(vector<int>& nums) {
86+
int n;
87+
if ((n = nums.size()) == 0) return 0;
88+
return robRange(nums, 0, n - 1);
89+
}
90+
91+
private:
92+
int robRange(vector<int>& nums, int start, int end) {
93+
if (end - start == 0) return nums[start];
94+
int pre = 0;
95+
int cur = nums[start];
96+
for (int i = start + 1; i < end + 1; ++i) {
97+
int t = max(pre + nums[i], cur);
98+
pre = cur;
99+
cur = t;
100+
}
101+
return cur;
102+
}
103+
};
104+
```
105+
106+
### **Go**
107+
108+
```go
109+
func rob(nums []int) int {
110+
n := len(nums)
111+
if n == 0 {
112+
return 0
113+
}
114+
return robRange(nums, 0, n - 1)
115+
}
116+
117+
func robRange(nums[]int, start int, end int) int {
118+
if end - start == 0 {
119+
return nums[start]
120+
}
121+
pre, cur := 0, nums[start]
122+
for i := start + 1; i < end + 1; i++ {
123+
pre, cur = cur, max(pre + nums[i], cur)
124+
}
125+
return cur
126+
}
127+
128+
func max(a, b int) int {
129+
if (a > b) {
130+
return a
131+
}
132+
return b
133+
}
134+
```
135+
78136
### **...**
79137

80138
```

solution/0100-0199/0198.House Robber/README_EN.md

+73-17
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,16 @@
4343
```python
4444
class Solution:
4545
def rob(self, nums: List[int]) -> int:
46+
def robRange(nums, start, end):
47+
if end - start == 0:
48+
return nums[start]
49+
pre, cur = 0, nums[start]
50+
for i in range(start + 1, end + 1):
51+
pre, cur = cur, max(pre + nums[i], cur)
52+
return cur
4653
if not nums:
4754
return 0
48-
n = len(nums)
49-
if n == 1:
50-
return nums[0]
51-
pre, cur = nums[0], max(nums[0], nums[1])
52-
for i in range(2, n):
53-
t = max(pre + nums[i], cur)
54-
pre, cur = cur, t
55-
return cur
55+
return robRange(nums, 0, len(nums) - 1)
5656
```
5757

5858
### **Java**
@@ -61,15 +61,15 @@ class Solution:
6161
class Solution {
6262
public int rob(int[] nums) {
6363
int n;
64-
if (nums == null || (n = nums.length) == 0) {
65-
return 0;
66-
}
67-
if (n == 1) {
68-
return nums[0];
69-
}
70-
int pre = nums[0];
71-
int cur = Math.max(nums[0], nums[1]);
72-
for (int i = 2; i < n; ++i) {
64+
if ((n = nums.length) == 0) return 0;
65+
return robRange(nums, 0, n - 1);
66+
}
67+
68+
private int robRange(int[] nums, int start, int end) {
69+
if (end - start == 0) return nums[start];
70+
int pre = 0;
71+
int cur = nums[start];
72+
for (int i = start + 1; i < end + 1; ++i) {
7373
int t = Math.max(pre + nums[i], cur);
7474
pre = cur;
7575
cur = t;
@@ -79,6 +79,62 @@ class Solution {
7979
}
8080
```
8181

82+
### **C++**
83+
84+
```cpp
85+
class Solution {
86+
public:
87+
int rob(vector<int>& nums) {
88+
int n;
89+
if ((n = nums.size()) == 0) return 0;
90+
return robRange(nums, 0, n - 1);
91+
}
92+
93+
private:
94+
int robRange(vector<int>& nums, int start, int end) {
95+
if (end - start == 0) return nums[start];
96+
int pre = 0;
97+
int cur = nums[start];
98+
for (int i = start + 1; i < end + 1; ++i) {
99+
int t = max(pre + nums[i], cur);
100+
pre = cur;
101+
cur = t;
102+
}
103+
return cur;
104+
}
105+
};
106+
```
107+
108+
### **Go**
109+
110+
```go
111+
func rob(nums []int) int {
112+
n := len(nums)
113+
if n == 0 {
114+
return 0
115+
}
116+
return robRange(nums, 0, n - 1)
117+
}
118+
119+
func robRange(nums[]int, start int, end int) int {
120+
if end - start == 0 {
121+
return nums[start]
122+
}
123+
pre, cur := 0, nums[start]
124+
for i := start + 1; i < end + 1; i++ {
125+
pre, cur = cur, max(pre + nums[i], cur)
126+
}
127+
return cur
128+
}
129+
130+
func max(a, b int) int {
131+
if (a > b) {
132+
return a
133+
}
134+
return b
135+
}
136+
```
137+
82138
### **...**
83139

84140
```
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
class Solution {
22
public:
33
int rob(vector<int>& nums) {
4-
if (nums.size() == 0)
5-
return 0 ;
6-
if (nums.size() == 1)
7-
return nums[0] ;
8-
vector<int> dp(nums.size(), -1) ;
9-
dp[0] = nums[0] ;
10-
dp[1] = max(nums[0], nums[1]) ;
11-
for (int i = 2; i < nums.size(); ++i)
12-
{
13-
dp[i] = max(
14-
dp[i-2] + nums[i],
15-
dp[i-1]
16-
) ;
4+
int n;
5+
if ((n = nums.size()) == 0) return 0;
6+
return robRange(nums, 0, n - 1);
7+
}
8+
9+
private:
10+
int robRange(vector<int>& nums, int start, int end) {
11+
if (end - start == 0) return nums[start];
12+
int pre = 0;
13+
int cur = nums[start];
14+
for (int i = start + 1; i < end + 1; ++i) {
15+
int t = max(pre + nums[i], cur);
16+
pre = cur;
17+
cur = t;
1718
}
18-
return dp[dp.size()-1] ;
19+
return cur;
1920
}
2021
};
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
1-
/*
2-
198.House Robber
3-
动态规划的思路,找到状态转移方程 `f(n) = max(f(n-2)+nums[n], f(n-1))` ,初始值为 `f(0)=0, f(1)=nums[1]`
4-
*/
5-
61
func rob(nums []int) int {
7-
x, y := 0, 0
8-
for _, n := range nums {
9-
x, y = y, x+n
10-
if x > y {
11-
y = x
12-
}
13-
}
14-
return y
2+
n := len(nums)
3+
if n == 0 {
4+
return 0
5+
}
6+
return robRange(nums, 0, n - 1)
7+
}
8+
9+
func robRange(nums[]int, start int, end int) int {
10+
if end - start == 0 {
11+
return nums[start]
12+
}
13+
pre, cur := 0, nums[start]
14+
for i := start + 1; i < end + 1; i++ {
15+
pre, cur = cur, max(pre + nums[i], cur)
16+
}
17+
return cur
18+
}
19+
20+
func max(a, b int) int {
21+
if (a > b) {
22+
return a
23+
}
24+
return b
1525
}

solution/0100-0199/0198.House Robber/Solution.java

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
class Solution {
22
public int rob(int[] nums) {
33
int n;
4-
if (nums == null || (n = nums.length) == 0) {
5-
return 0;
6-
}
7-
if (n == 1) {
8-
return nums[0];
9-
}
10-
int pre = nums[0];
11-
int cur = Math.max(nums[0], nums[1]);
12-
for (int i = 2; i < n; ++i) {
4+
if ((n = nums.length) == 0) return 0;
5+
return robRange(nums, 0, n - 1);
6+
}
7+
8+
private int robRange(int[] nums, int start, int end) {
9+
if (end - start == 0) return nums[start];
10+
int pre = 0;
11+
int cur = nums[start];
12+
for (int i = start + 1; i < end + 1; ++i) {
1313
int t = Math.max(pre + nums[i], cur);
1414
pre = cur;
1515
cur = t;

0 commit comments

Comments
 (0)