Skip to content

Commit efece42

Browse files
authored
Merge branch 'youngyangyang04:master' into master
2 parents ef105ed + da87ff9 commit efece42

22 files changed

+360
-130
lines changed

problems/0059.螺旋矩阵II.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,58 @@ func generateMatrix(_ n: Int) -> [[Int]] {
358358
}
359359
```
360360

361+
Rust:
362+
363+
```rust
364+
impl Solution {
365+
pub fn generate_matrix(n: i32) -> Vec<Vec<i32>> {
366+
let mut res = vec![vec![0; n as usize]; n as usize];
367+
let (mut startX, mut startY, mut offset): (usize, usize, usize) = (0, 0, 1);
368+
let mut loopIdx = n/2;
369+
let mid: usize = loopIdx as usize;
370+
let mut count = 1;
371+
let (mut i, mut j): (usize, usize) = (0, 0);
372+
while loopIdx > 0 {
373+
i = startX;
374+
j = startY;
375+
376+
while j < (startY + (n as usize) - offset) {
377+
res[i][j] = count;
378+
count += 1;
379+
j += 1;
380+
}
381+
382+
while i < (startX + (n as usize) - offset) {
383+
res[i][j] = count;
384+
count += 1;
385+
i += 1;
386+
}
387+
388+
while j > startY {
389+
res[i][j] = count;
390+
count += 1;
391+
j -= 1;
392+
}
393+
394+
while i > startX {
395+
res[i][j] = count;
396+
count += 1;
397+
i -= 1;
398+
}
399+
400+
startX += 1;
401+
startY += 1;
402+
offset += 2;
403+
loopIdx -= 1;
404+
}
405+
406+
if(n % 2 == 1) {
407+
res[mid][mid] = count;
408+
}
409+
res
410+
}
411+
}
412+
```
361413

362414

363415
-----------------------

problems/0122.买卖股票的最佳时机II.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,21 @@ var maxProfit = function(prices) {
229229
};
230230
```
231231

232+
C:
233+
```c
234+
int maxProfit(int* prices, int pricesSize){
235+
int result = 0;
236+
int i;
237+
//从第二个元素开始遍历数组,与之前的元素进行比较
238+
for(i = 1; i < pricesSize; ++i) {
239+
//若该元素比前面元素大,则说明有利润。代表买入
240+
if(prices[i] > prices[i-1])
241+
result+= prices[i]-prices[i-1];
242+
}
243+
return result;
244+
}
245+
```
246+
232247
-----------------------
233248
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)
234249
* B站视频:[代码随想录](https://space.bilibili.com/525438321)

problems/0205.同构字符串.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,23 @@ class Solution {
9797
## Go
9898

9999
```go
100+
func isIsomorphic(s string, t string) bool {
101+
map1 := make(map[byte]byte)
102+
map2 := make(map[byte]byte)
103+
for i := range s {
104+
if _, ok := map1[s[i]]; !ok {
105+
map1[s[i]] = t[i] // map1保存 s[i] 到 t[j]的映射
106+
}
107+
if _, ok := map2[t[i]]; !ok {
108+
map2[t[i]] = s[i] // map2保存 t[i] 到 s[j]的映射
109+
}
110+
// 无法映射,返回 false
111+
if (map1[s[i]] != t[i]) || (map2[t[i]] != s[i]) {
112+
return false
113+
}
114+
}
115+
return true
116+
}
100117
```
101118

102119
## JavaScript

problems/0349.两个数组的交集.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,22 @@ var intersection = function(nums1, nums2) {
192192
};
193193
```
194194

195+
Swift:
196+
```swift
197+
func intersection(_ nums1: [Int], _ nums2: [Int]) -> [Int] {
198+
var set1 = Set<Int>()
199+
var set2 = Set<Int>()
200+
for num in nums1 {
201+
set1.insert(num)
202+
}
203+
for num in nums2 {
204+
if set1.contains(num) {
205+
set2.insert(num)
206+
}
207+
}
208+
return Array(set2)
209+
}
210+
```
195211

196212
## 相关题目
197213

problems/0541.反转字符串II.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,28 @@ var reverseStr = function(s, k) {
254254

255255
```
256256

257+
Swift:
258+
259+
```swift
260+
func reverseStr(_ s: String, _ k: Int) -> String {
261+
var ch = Array(s)
262+
263+
for i in stride(from: 0, to: ch.count, by: 2 * k) {
264+
var left = i
265+
var right = min(s.count - 1, left + k - 1)
266+
267+
while left < right {
268+
(ch[left], ch[right]) = (ch[right], ch[left])
269+
left += 1
270+
right -= 1
271+
}
272+
}
273+
return String(ch)
274+
}
275+
```
276+
277+
278+
257279

258280

259281
-----------------------

problems/0704.二分查找.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ func search(nums: [Int], target: Int) -> Int {
374374
} else if target > nums[middle] {
375375
// 当目标在区间右侧,就需要更新左边的边界值,新区间为[middle + 1, right]
376376
left = middle + 1
377-
} else {
377+
} else {
378378
// 当目标就是在中间,则返回中间值的下标
379379
return middle
380380
}
@@ -450,6 +450,33 @@ impl Solution {
450450
}
451451
```
452452

453+
**C:**
454+
```c
455+
int search(int* nums, int numsSize, int target){
456+
int left = 0;
457+
int right = numsSize-1;
458+
int middle = 0;
459+
//若left小于等于right,说明区间中元素不为0
460+
while(left<=right) {
461+
//更新查找下标middle的值
462+
middle = (left+right)/2;
463+
//此时target可能会在[left,middle-1]区间中
464+
if(nums[middle] > target) {
465+
right = middle-1;
466+
}
467+
//此时target可能会在[middle+1,right]区间中
468+
else if(nums[middle] < target) {
469+
left = middle+1;
470+
}
471+
//当前下标元素等于target值时,返回middle
472+
else if(nums[middle] == target){
473+
return middle;
474+
}
475+
}
476+
//若未找到target元素,返回-1
477+
return -1;
478+
}
479+
```
453480
454481
-----------------------
455482
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)

problems/0968.监控二叉树.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,45 @@ var minCameraCover = function(root) {
406406
};
407407
```
408408

409+
C:
410+
```c
411+
/*
412+
**函数后序遍历二叉树。判断一个结点状态时,根据其左右孩子结点的状态进行判断
413+
**状态:0为没有被摄像头覆盖到。1为此结点处应设置摄像头。2为此结点已被摄像头覆盖
414+
*/
415+
int traversal(struct TreeNode* node, int* ans) {
416+
//递归结束条件:传入结点为NULL,假设此结点能被摄像头覆盖。这样方便与对叶子结点的判断,将叶子结点设为0
417+
if(!node)
418+
return 2;
419+
//后序遍历二叉树,记录左右孩子的状态。根据左右孩子状态更新结点自身状态
420+
int left = traversal(node->left, ans);
421+
int right = traversal(node->right, ans);
422+
423+
//若左右孩子都可以被摄像头覆盖,将父亲结点状态设为0
424+
if(left == 2 && right == 2) {
425+
return 0;
426+
}
427+
//若左右孩子有一个结点状态为没有被覆盖(0),则将父亲结点状态设置为摄像头
428+
if(left == 0 || right == 0) {
429+
(*ans)++;
430+
return 1;
431+
}
432+
//若左右孩子有一个为摄像头,证明父亲结点可以被覆盖。将父亲结点状态变为2
433+
if(left == 1 || right == 1)
434+
return 2;
435+
//逻辑不会走到-1,语句不会执行
436+
return -1;
437+
}
438+
439+
int minCameraCover(struct TreeNode* root){
440+
int ans = 0;
441+
442+
//在对整个二叉树遍历后。头结点可能未被覆盖,这时候如果函数返回值为0,证明头结点未被覆盖。说明头结点也需要添置摄像头,ans++
443+
if(traversal(root, &ans) == 0)
444+
ans++;
445+
return ans;
446+
}
447+
```
409448
410449
-----------------------
411450
* 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)

problems/二叉树理论基础.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ class TreeNode:
215215
```
216216

217217
Go:
218-
```
218+
```go
219219
type TreeNode struct {
220220
Val int
221221
Left *TreeNode
@@ -224,7 +224,7 @@ type TreeNode struct {
224224
```
225225

226226
JavaScript:
227-
```
227+
```javascript
228228
function TreeNode(val, left, right) {
229229
this.val = (val===undefined ? 0 : val)
230230
this.left = (left===undefined ? null : left)

problems/剑指Offer05.替换空格.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,49 @@ javaScript:
264264
};
265265
```
266266

267+
Swift:
268+
269+
```swift
270+
func replaceSpace(_ s: String) -> String {
271+
var strArr = Array(s)
272+
var count = 0
273+
274+
// 统计空格的个数
275+
for i in strArr {
276+
if i == " " {
277+
count += 1
278+
}
279+
}
280+
// left 指向旧数组的最后一个元素
281+
var left = strArr.count - 1
282+
// right 指向扩容后数组的最后一个元素(这里还没对数组进行实际上的扩容)
283+
var right = strArr.count + count * 2 - 1
284+
285+
// 实际对数组扩容
286+
for _ in 0..<(count * 2) {
287+
strArr.append(" ")
288+
}
289+
290+
while left < right {
291+
if strArr[left] == " " {
292+
strArr[right] = "0"
293+
strArr[right - 1] = "2"
294+
strArr[right - 2] = "%"
295+
left -= 1
296+
right -= 3
297+
} else {
298+
strArr[right] = strArr[left]
299+
left -= 1
300+
right -= 1
301+
}
302+
}
303+
304+
return String(strArr)
305+
}
306+
```
307+
308+
309+
267310

268311

269312
-----------------------

problems/周总结/20200927二叉树周末总结.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
## 周一
99

10-
本周我们开始讲解了二叉树,在[关于二叉树,你该了解这些!](https://mp.weixin.qq.com/s/_ymfWYvTNd2GvWvC5HOE4A)中讲解了二叉树的理论基础。
10+
本周我们开始讲解了二叉树,在[关于二叉树,你该了解这些!](https://programmercarl.com/二叉树理论基础.html)中讲解了二叉树的理论基础。
1111

1212
有同学会把红黑树和二叉平衡搜索树弄分开了,其实红黑树就是一种二叉平衡搜索树,这两个树不是独立的,所以C++中map、multimap、set、multiset的底层实现机制是二叉平衡搜索树,再具体一点是红黑树。
1313

@@ -48,17 +48,17 @@ morris遍历是二叉树遍历算法的超强进阶算法,morris遍历可以
4848

4949
## 周二
5050

51-
[二叉树:一入递归深似海,从此offer是路人](https://mp.weixin.qq.com/s/PwVIfxDlT3kRgMASWAMGhA)中讲到了递归三要素,以及前中后序的递归写法。
51+
[二叉树:一入递归深似海,从此offer是路人](https://programmercarl.com/二叉树的递归遍历.html)中讲到了递归三要素,以及前中后序的递归写法。
5252

53-
文章中我给出了leetcode上三道二叉树的前中后序题目,但是看完[二叉树:一入递归深似海,从此offer是路人](https://mp.weixin.qq.com/s/PwVIfxDlT3kRgMASWAMGhA),依然可以解决n叉树的前后序遍历,在leetcode上分别是
53+
文章中我给出了leetcode上三道二叉树的前中后序题目,但是看完[二叉树:一入递归深似海,从此offer是路人](https://programmercarl.com/二叉树的递归遍历.html),依然可以解决n叉树的前后序遍历,在leetcode上分别是
5454
* 589. N叉树的前序遍历
5555
* 590. N叉树的后序遍历
5656

5757
大家可以再去把这两道题目做了。
5858

5959
## 周三
6060

61-
[二叉树:听说递归能做的,栈也能做!](https://mp.weixin.qq.com/s/c_zCrGHIVlBjUH_hJtghCg)中我们开始用栈来实现递归的写法,也就是所谓的迭代法。
61+
[二叉树:听说递归能做的,栈也能做!](https://programmercarl.com/二叉树的迭代遍历.html)中我们开始用栈来实现递归的写法,也就是所谓的迭代法。
6262

6363
细心的同学发现文中前后序遍历空节点是否入栈写法是不同的
6464

@@ -121,7 +121,7 @@ public:
121121

122122
## 周四
123123

124-
[二叉树:前中后序迭代方式的写法就不能统一一下么?](https://mp.weixin.qq.com/s/WKg0Ty1_3SZkztpHubZPRg)中我们使用空节点作为标记,给出了统一的前中后序迭代法。
124+
[二叉树:前中后序迭代方式的写法就不能统一一下么?](https://programmercarl.com/二叉树的统一迭代法.html)中我们使用空节点作为标记,给出了统一的前中后序迭代法。
125125

126126
此时又多了一种前中后序的迭代写法,那么有同学问了:前中后序迭代法是不是一定要统一来写,这样才算是规范。
127127

@@ -131,7 +131,7 @@ public:
131131

132132
## 周五
133133

134-
[二叉树:层序遍历登场!](https://mp.weixin.qq.com/s/Gb3BjakIKGNpup2jYtTzog)中我们介绍了二叉树的另一种遍历方式(图论中广度优先搜索在二叉树上的应用)即:层序遍历。
134+
[二叉树:层序遍历登场!](https://programmercarl.com/0102.二叉树的层序遍历.html)中我们介绍了二叉树的另一种遍历方式(图论中广度优先搜索在二叉树上的应用)即:层序遍历。
135135

136136
看完这篇文章,去leetcode上怒刷五题,文章中 编号107题目的样例图放错了(原谅我匆忙之间总是手抖),但不影响大家理解。
137137

@@ -141,7 +141,7 @@ public:
141141

142142
## 周六
143143

144-
[二叉树:你真的会翻转二叉树么?](https://mp.weixin.qq.com/s/6gY1MiXrnm-khAAJiIb5Bg)中我们把翻转二叉树这么一道简单又经典的问题,充分的剖析了一波,相信就算做过这道题目的同学,看完本篇之后依然有所收获!
144+
[二叉树:你真的会翻转二叉树么?](https://programmercarl.com/0226.翻转二叉树.html)中我们把翻转二叉树这么一道简单又经典的问题,充分的剖析了一波,相信就算做过这道题目的同学,看完本篇之后依然有所收获!
145145

146146

147147
**文中我指的是递归的中序遍历是不行的,因为使用递归的中序遍历,某些节点的左右孩子会翻转两次。**

0 commit comments

Comments
 (0)