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 a0a50c9

Browse files
Merge branch 'youngyangyang04:master' into master
2 parents 84f41f6 + c855948 commit a0a50c9

File tree

4 files changed

+147
-36
lines changed

4 files changed

+147
-36
lines changed

‎problems/0098.验证二叉搜索树.md‎

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,28 @@ class Solution:
408408
return True
409409

410410
```
411-
## Go
411+
```python
412+
# 遵循Carl的写法,只添加了节点判断的部分
413+
class Solution:
414+
def isValidBST(self, root: TreeNode) -> bool:
415+
# method 2
416+
que, pre = [], None
417+
while root or que:
418+
while root:
419+
que.append(root)
420+
root = root.left
421+
root = que.pop()
422+
# 对第一个节点只做记录,对后面的节点进行比较
423+
if pre is None:
424+
pre = root.val
425+
else:
426+
if pre >= root.val: return False
427+
pre = root.val
428+
root = root.right
429+
return True
430+
```
431+
432+
## Go
412433

413434
```Go
414435
import "math"

‎problems/0101.对称二叉树.md‎

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -437,41 +437,6 @@ class Solution:
437437
return True
438438
```
439439

440-
层序遍历
441-
442-
```python
443-
class Solution:
444-
def isSymmetric(self, root: TreeNode) -> bool:
445-
if not root: return True
446-
que, cnt = [[root.left, root.right]], 1
447-
while que:
448-
nodes, tmp, sign = que.pop(), [], False
449-
for node in nodes:
450-
if not node:
451-
tmp.append(None)
452-
tmp.append(None)
453-
else:
454-
if node.left:
455-
tmp.append(node.left)
456-
sign = True
457-
else:
458-
tmp.append(None)
459-
if node.right:
460-
tmp.append(node.right)
461-
sign = True
462-
else:
463-
tmp.append(None)
464-
p1, p2 = 0, len(nodes) - 1
465-
while p1 < p2:
466-
if (not nodes[p1] and nodes[p2]) or (nodes[p1] and not nodes[p2]): return False
467-
elif nodes[p1] and nodes[p2] and nodes[p1].val != nodes[p2].val: return False
468-
p1 += 1
469-
p2 -= 1
470-
if sign: que.append(tmp)
471-
cnt += 1
472-
return True
473-
```
474-
475440
## Go
476441

477442
```go

‎problems/0332.重新安排行程.md‎

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,50 @@ var findItinerary = function(tickets) {
506506
507507
```
508508

509+
### TypeScript
510+
511+
```typescript
512+
function findItinerary(tickets: string[][]): string[] {
513+
/**
514+
TicketsMap 实例:
515+
{ NRT: Map(1) { 'JFK' => 1 }, JFK: Map(2) { 'KUL' => 1, 'NRT' => 1 } }
516+
这里选择Map数据结构的原因是:与Object类型的一个主要差异是,Map实例会维护键值对的插入顺序。
517+
*/
518+
type TicketsMap = {
519+
[index: string]: Map<string, number>
520+
};
521+
tickets.sort((a, b) => {
522+
return a[1] < b[1] ? -1 : 1;
523+
});
524+
const ticketMap: TicketsMap = {};
525+
for (const [from, to] of tickets) {
526+
if (ticketMap[from] === undefined) {
527+
ticketMap[from] = new Map();
528+
}
529+
ticketMap[from].set(to, (ticketMap[from].get(to) || 0) + 1);
530+
}
531+
const resRoute = ['JFK'];
532+
backTracking(tickets.length, ticketMap, resRoute);
533+
return resRoute;
534+
function backTracking(ticketNum: number, ticketMap: TicketsMap, route: string[]): boolean {
535+
if (route.length === ticketNum + 1) return true;
536+
const targetMap = ticketMap[route[route.length - 1]];
537+
if (targetMap !== undefined) {
538+
for (const [to, count] of targetMap.entries()) {
539+
if (count > 0) {
540+
route.push(to);
541+
targetMap.set(to, count - 1);
542+
if (backTracking(ticketNum, ticketMap, route) === true) return true;
543+
targetMap.set(to, count);
544+
route.pop();
545+
}
546+
}
547+
}
548+
return false;
549+
}
550+
};
551+
```
552+
509553
### Swift
510554

511555
直接迭代tickets数组:

‎problems/回溯算法去重问题的另一种写法.md‎

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,87 @@ class Solution:
365365
return res
366366
```
367367

368+
TypeScript:
369+
370+
**90.子集II**
371+
372+
```typescript
373+
function subsetsWithDup(nums: number[]): number[][] {
374+
nums.sort((a, b) => a - b);
375+
const resArr: number[][] = [];
376+
backTraking(nums, 0, []);
377+
return resArr;
378+
function backTraking(nums: number[], startIndex: number, route: number[]): void {
379+
resArr.push(route.slice());
380+
const helperSet: Set<number> = new Set();
381+
for (let i = startIndex, length = nums.length; i < length; i++) {
382+
if (helperSet.has(nums[i])) continue;
383+
helperSet.add(nums[i]);
384+
route.push(nums[i]);
385+
backTraking(nums, i + 1, route);
386+
route.pop();
387+
}
388+
}
389+
};
390+
```
391+
392+
**40. 组合总和 II**
393+
394+
```typescript
395+
function combinationSum2(candidates: number[], target: number): number[][] {
396+
candidates.sort((a, b) => a - b);
397+
const resArr: number[][] = [];
398+
backTracking(candidates, target, 0, 0, []);
399+
return resArr;
400+
function backTracking(
401+
candidates: number[], target: number,
402+
curSum: number, startIndex: number, route: number[]
403+
) {
404+
if (curSum > target) return;
405+
if (curSum === target) {
406+
resArr.push(route.slice());
407+
return;
408+
}
409+
const helperSet: Set<number> = new Set();
410+
for (let i = startIndex, length = candidates.length; i < length; i++) {
411+
let tempVal: number = candidates[i];
412+
if (helperSet.has(tempVal)) continue;
413+
helperSet.add(tempVal);
414+
route.push(tempVal);
415+
backTracking(candidates, target, curSum + tempVal, i + 1, route);
416+
route.pop();
417+
418+
}
419+
}
420+
};
421+
```
422+
423+
**47. 全排列 II**
424+
425+
```typescript
426+
function permuteUnique(nums: number[]): number[][] {
427+
const resArr: number[][] = [];
428+
const usedArr: boolean[] = [];
429+
backTracking(nums, []);
430+
return resArr;
431+
function backTracking(nums: number[], route: number[]): void {
432+
if (nums.length === route.length) {
433+
resArr.push(route.slice());
434+
return;
435+
}
436+
const usedSet: Set<number> = new Set();
437+
for (let i = 0, length = nums.length; i < length; i++) {
438+
if (usedArr[i] === true || usedSet.has(nums[i])) continue;
439+
usedSet.add(nums[i]);
440+
route.push(nums[i]);
441+
usedArr[i] = true;
442+
backTracking(nums, route);
443+
usedArr[i] = false;
444+
route.pop();
445+
}
446+
}
447+
};
448+
```
368449

369450
Go:
370451

0 commit comments

Comments
(0)

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