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 aaec803

Browse files
update 5 leetcode
1 parent 0d713b1 commit aaec803

File tree

5 files changed

+164
-1
lines changed

5 files changed

+164
-1
lines changed

‎leetcode/101.symmetric-tree.js

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
* @lc app=leetcode id=101 lang=javascript
3+
*
4+
* [101] Symmetric Tree
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* Definition for a binary tree node.
10+
* function TreeNode(val, left, right) {
11+
* this.val = (val===undefined ? 0 : val)
12+
* this.left = (left===undefined ? null : left)
13+
* this.right = (right===undefined ? null : right)
14+
* }
15+
*/
16+
/**
17+
* 深度优先,使用递归的方式
18+
* @param {TreeNode} root
19+
* @return {boolean}
20+
*/
21+
var isSymmetric = function(root) {
22+
if (!root) {
23+
return false;
24+
}
25+
const check = (p, q) => {
26+
// 判断是否有一级子节点,如果没有则只有根节点,就是对称的
27+
if (!p && !q) {
28+
return true;
29+
}
30+
// 如果一边有,另一边没有,那肯定是不对称的
31+
if (!p || !q) {
32+
return false;
33+
}
34+
// 当前节点的值相等,并且往下也是相等的
35+
// 是两棵树往对称的方向行走下去比较
36+
return p.val === q.val && check(p.left, q.right) && check(q.left, p.right);
37+
}
38+
39+
// 注意是传入两个根节点,但是判断的方向是一左一右,这样就形成了左右对称的效果
40+
return check(root, root);
41+
};
42+
43+
/**
44+
* 广度优先的写法,使用迭代
45+
* 思路和上面是一样的
46+
* 传入两个相同的树,但是判断顺序是左右相反的
47+
* @param {TreeNode} root
48+
* @return {boolean}
49+
*/
50+
var isSymmetric2 = function(root) {
51+
let queue1 = [root];
52+
let queue2 = [root];
53+
54+
while (queue1.length) {
55+
const cur1 = queue1.shift();
56+
const cur2 = queue2.shift();
57+
if (!cur1 && !cur2) {
58+
// 不做任何处理,但是要放在第二个判断前面
59+
// 先排除两个都不存在的情况,再判断有一个节点有,另一个节点没有的情况
60+
} else if (!cur1 || !cur2) {
61+
return false;
62+
} else if (cur1.val !== cur2.val) {
63+
return false;
64+
} else {
65+
queue1.push(cur1.left);
66+
queue1.push(cur1.right);
67+
queue2.push(cur2.right);
68+
queue2.push(cur2.left);
69+
}
70+
}
71+
return true;
72+
};
73+
// @lc code=end

‎leetcode/112.path-sum.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
2+
/*
3+
* @lc app=leetcode id=112 lang=javascript
4+
*
5+
* [112] Path Sum
6+
*/
7+
8+
// @lc code=start
9+
/**
10+
* Definition for a binary tree node.
11+
* function TreeNode(val, left, right) {
12+
* this.val = (val===undefined ? 0 : val)
13+
* this.left = (left===undefined ? null : left)
14+
* this.right = (right===undefined ? null : right)
15+
* }
16+
*/
17+
/**
18+
* 递归的思路,如果总和相等,那么递减节点之后最后一个节点的值和递减的值必然相等
19+
* @param {TreeNode} root
20+
* @param {number} targetSum
21+
* @return {boolean}
22+
*/
23+
var hasPathSum = function(root, targetSum) {
24+
if (root === null) {
25+
return false;
26+
}
27+
if (root.left === null && root.right === null) {
28+
return root.val === targetSum;
29+
}
30+
return hasPathSum(root.left, targetSum - root.val) || hasPathSum(root.right, targetSum - root.val);
31+
};
32+
// @lc code=end

‎leetcode/1528.shuffle-string.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* @lc app=leetcode id=1528 lang=javascript
3+
*
4+
* [1528] Shuffle String
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* @param {string} s
10+
* @param {number[]} indices
11+
* @return {string}
12+
*/
13+
var restoreString = function(s, indices) {
14+
let arr = []
15+
for (let i = 0; i < indices.length; i++) {
16+
let index = indices[i];
17+
arr[index] = s.charAt(i);
18+
}
19+
return arr.join('');
20+
};
21+
// @lc code=end

‎leetcode/1556.thousand-separator.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* @lc app=leetcode id=1556 lang=javascript
3+
*
4+
* [1556] Thousand Separator
5+
*/
6+
7+
// @lc code=start
8+
/**
9+
* 转成数组再依次插入,因为是从后面插入的,而索引是从前往后的,所以每次插入对索引不影响,直接依次插入即可
10+
* @param {number} n
11+
* @return {string}
12+
*/
13+
var thousandSeparator = function(n) {
14+
let s = n + '';
15+
let arr = s.split('');
16+
if (s.length <= 3) {
17+
return s;
18+
}
19+
let len = s.length;
20+
while (len > 3) {
21+
len -= 3;
22+
arr.splice(len, 0, '.');
23+
}
24+
return arr.join('');
25+
};
26+
27+
/**
28+
* 转成字符串,直接使用字符串的格式化,这个方式比较 hack
29+
* 正则去替代 ','
30+
* @param {*} n
31+
* @returns
32+
*/
33+
var thousandSeparator2 = function(n) {
34+
let s = n.toLocaleString();
35+
return s.replace(/,/g, '.');
36+
};
37+
// @lc code=end

‎leetcode/35.search-insert-position.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var searchInsert = function(nums, target) {
1616
// 二分法向中间查找
1717
// 不是两边往中间找,而是不断更新中间值
1818
while (left <= right) {
19-
// 二进制右移一位,等同于对半取整,因为向左一位是乘以 2, 向右一位是除以 2
19+
// 二进制右移一位,等同于对半而且取整,因为向左一位是乘以 2, 向右一位是除以 2
2020
let mid = ((right - left) >> 1) + left;
2121
if (target <= nums[mid]) {
2222
ans = mid;

0 commit comments

Comments
(0)

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