Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5d16ef9

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

File tree

16 files changed

+432
-199
lines changed

16 files changed

+432
-199
lines changed

‎lcof/README.md‎

Lines changed: 2 additions & 0 deletions
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‎

Lines changed: 12 additions & 4 deletions
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‎

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

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

Lines changed: 75 additions & 17 deletions
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-
return0;
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) return0;
63+
return robRange(nums, 0, n -1);
64+
}
65+
66+
privateintrobRange(int[] nums, intstart, intend) {
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‎

Lines changed: 73 additions & 17 deletions
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-
return0;
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) return0;
65+
return robRange(nums, 0, n -1);
66+
}
67+
68+
privateintrobRange(int[] nums, intstart, intend) {
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
```
Lines changed: 15 additions & 14 deletions
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
};
Lines changed: 23 additions & 13 deletions
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‎

Lines changed: 9 additions & 9 deletions
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-
return0;
6-
}
7-
if (n == 1) {
8-
returnnums[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) return0;
5+
returnrobRange(nums, 0, n - 1);
6+
}
7+
8+
privateintrobRange(int[] nums, intstart, intend) {
9+
if (end - start == 0) returnnums[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)

AltStyle によって変換されたページ (->オリジナル) /