Skip to content

Commit aaec803

Browse files
committed
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
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)