Skip to content

Commit bde24bf

Browse files
committed
feat: update 5 leetcode
1 parent 7c8d3b5 commit bde24bf

5 files changed

+204
-0
lines changed

leetcode/100.same-tree.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* @lc app=leetcode id=100 lang=typescript
3+
*
4+
* [100] Same Tree
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* Definition for a binary tree node.
10+
* class TreeNode {
11+
* val: number
12+
* left: TreeNode | null
13+
* right: TreeNode | null
14+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
15+
* this.val = (val===undefined ? 0 : val)
16+
* this.left = (left===undefined ? null : left)
17+
* this.right = (right===undefined ? null : right)
18+
* }
19+
* }
20+
*/
21+
22+
/**
23+
* @description: 深度优先的递归的写法,比较取巧
24+
* 核心是找到递归公式和终止条件
25+
* 空间和时间复杂度都是: O(min(m, n))
26+
* @param {TreeNode} p
27+
* @param {TreeNode} q
28+
* @return {boolean}
29+
*/
30+
function isSameTree(p: TreeNode | null, q: TreeNode | null): boolean {
31+
if (p === null && q === null) return true;
32+
else if (p === null || q === null) return false;
33+
else if (p.val !== q.val) return false;
34+
35+
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
36+
};
37+
// @lc code=end
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
* @lc app=leetcode id=1008 lang=typescript
3+
*
4+
* [1008] Construct Binary Search Tree from Preorder Traversal
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* Definition for a binary tree node.
10+
* class TreeNode {
11+
* val: number
12+
* left: TreeNode | null
13+
* right: TreeNode | null
14+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
15+
* this.val = (val===undefined ? 0 : val)
16+
* this.left = (left===undefined ? null : left)
17+
* this.right = (right===undefined ? null : right)
18+
* }
19+
* }
20+
*/
21+
22+
/**
23+
* @description: 递归的思路
24+
* @param {number} preorder
25+
* @return {TreeNode|null}
26+
*/
27+
function bstFromPreorder(preorder: number[]): TreeNode | null {
28+
/**
29+
* @description: 查找临界点
30+
* @param {number} preorder
31+
* @param {number} start
32+
* @param {number} end
33+
* @param {number} val
34+
* @return {number}
35+
*/
36+
function findRightIndex(preorder: number[], start: number, end: number, val: number): number {
37+
while (start <= end && preorder[start] <= val) {
38+
start++;
39+
}
40+
return start;
41+
}
42+
/**
43+
* @description: 递归构建生成二叉搜索树
44+
* @param {number[]} preorder
45+
* @param {number} start
46+
* @param {number} end
47+
* @return {TreeNode | null}
48+
*/
49+
function constructorBST(preorder: number[], start: number, end: number): TreeNode | null {
50+
if (start > end) return null;
51+
// 取第一个节点作为当前节点构造
52+
const root = new TreeNode(preorder[start]);
53+
// 说明递归结束
54+
if (start === end) return root;
55+
// 找到第一个比当前节点的值更大的索引,也就是右子节点的索引
56+
const rightIndex = findRightIndex(preorder, start + 1, end, root.val);
57+
// 根据这个索引的位置区分当前节点的左右子树的分界点
58+
root.left = constructorBST(preorder, start + 1, rightIndex - 1);
59+
root.right = constructorBST(preorder, rightIndex, end);
60+
61+
return root;
62+
}
63+
64+
return constructorBST(preorder, 0, preorder.length - 1);
65+
};
66+
// @lc code=end
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* @lc app=leetcode id=1009 lang=typescript
3+
*
4+
* [1009] Complement of Base 10 Integer
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* @description: 本题和 476 相同,再做一遍巩固
10+
* 这是按位非的实现
11+
* 时间复杂度 O(logn)
12+
* 空间复杂度 O(1)
13+
* @param {number} n
14+
* @return {number}
15+
*/
16+
function bitwiseComplement(n: number): number {
17+
let highbit = 0;
18+
19+
// 从 1 开始循环
20+
for (let i = 1; i <= 30; i++) {
21+
// 通过循环找到最高的位 i; 左移就是放大数字来查找最高位
22+
if (n >= 1 << i) {
23+
highbit = i;
24+
} else {
25+
break;
26+
}
27+
}
28+
// 防止溢出
29+
const mask = highbit === 30 ? 0x7fffffff : (1 << (highbit + 1)) - 1;
30+
31+
return n ^ mask;
32+
};
33+
34+
function bitwiseComplement2(n: number): number {
35+
const str = n.toString(2); // 转成 2 进制
36+
let reversed = '';
37+
38+
for (const s of str) {
39+
reversed += s === '1' ? '0' : '1';
40+
}
41+
42+
return parseInt(reversed, 2);
43+
};
44+
// @lc code=end
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* @lc app=leetcode id=557 lang=typescript
3+
*
4+
* [557] Reverse Words in a String III
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* @description: 直接使用数组 API
10+
* @param {string} s
11+
* @return {string}
12+
*/
13+
function reverseWords(s: string): string {
14+
let str = '';
15+
for (const word of s.split(' ')) {
16+
str += word.split('').reverse().join('') + ' ';
17+
}
18+
return str.trim();
19+
};
20+
// @lc code=end
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* @lc app=leetcode id=617 lang=typescript
3+
*
4+
* [617] Merge Two Binary Trees
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* Definition for a binary tree node.
10+
* class TreeNode {
11+
* val: number
12+
* left: TreeNode | null
13+
* right: TreeNode | null
14+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
15+
* this.val = (val===undefined ? 0 : val)
16+
* this.left = (left===undefined ? null : left)
17+
* this.right = (right===undefined ? null : right)
18+
* }
19+
* }
20+
*/
21+
22+
/**
23+
* @description: 递归实现,核心在于确认递推公式
24+
* 时间和空间复杂度一样,都是 O(min(m, n))
25+
* @param {TreeNode|null} root1
26+
* @param {TreeNode|null} root2
27+
* @return {TreeNode|null}
28+
*/
29+
function mergeTrees(root1: TreeNode | null, root2: TreeNode | null): TreeNode | null {
30+
if (root1 === null) return root2;
31+
if (root2 === null) return root1;
32+
const node: TreeNode | null = new TreeNode(root1.val + root2.val);
33+
node.left = mergeTrees(root1.left, root2.left);
34+
node.right = mergeTrees(root1.right, root2.right);
35+
return node;
36+
};
37+
// @lc code=end

0 commit comments

Comments
 (0)