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 ef8cc67

Browse files
update 2 leetcode
1 parent 2bc50eb commit ef8cc67

File tree

2 files changed

+174
-5
lines changed

2 files changed

+174
-5
lines changed
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/*
2+
* @lc app=leetcode id=102 lang=javascript
3+
*
4+
* [102] Binary Tree Level Order Traversal
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 {number[][]}
20+
*/
21+
var levelOrder = function(root) {
22+
function map(root, res = [], level = 0) {
23+
if (!root) {
24+
return []; // 根节点为空的情况
25+
}
26+
res[level] = res[level] || [];
27+
res[level].push(root.val);
28+
root.left && map(root.left, res, level + 1);
29+
root.right && map(root.right, res, level + 1);
30+
return res;
31+
}
32+
return map(root);
33+
};
34+
35+
/**
36+
* 迭代遍历的方式
37+
* @param {TreeNode} root
38+
* @return {number[][]}
39+
*/
40+
var levelOrder2 = function(root) {
41+
let queues = [root];
42+
let level = 0;
43+
let res = [];
44+
45+
while (queues.length) {
46+
// 当前层级的长度
47+
let len = queues.length;
48+
// 遍历同一个层级
49+
while (len--) {
50+
const cur = queues.shift();
51+
// 不存在就直接跳过
52+
if (!cur) {
53+
continue;
54+
}
55+
if (cur.val !== null) {
56+
res[level] = res[level] || [];
57+
res[level].push(cur.val);
58+
}
59+
cur.left && queues.push(cur.left);
60+
cur.right && queues.push(cur.right);
61+
}
62+
63+
level++;
64+
}
65+
66+
return res;
67+
};
68+
69+
/**
70+
* 迭代声明的方式,但是少声明一个变量
71+
* @param {*} root
72+
* @returns
73+
*/
74+
var levelOrder3 = function(root) {
75+
// 下文是默认推入数组的,所以对没有数据的需要单独判断
76+
if (!root) {
77+
return [];
78+
}
79+
let queues = [root];
80+
let res = [];
81+
82+
while (queues.length) {
83+
// 当前层级的长度
84+
let len = queues.length;
85+
res.push([]);
86+
// 遍历同一个层级
87+
while (len--) {
88+
const cur = queues.shift();
89+
// 不存在就直接跳过
90+
if (!cur) {
91+
continue;
92+
}
93+
if (cur.val !== null) {
94+
res[res.length - 1] = res[res.length - 1] || [];
95+
res[res.length - 1].push(cur.val);
96+
}
97+
cur.left && queues.push(cur.left);
98+
cur.right && queues.push(cur.right);
99+
}
100+
}
101+
102+
return res;
103+
};
104+
// @lc code=end

‎leetcode/70.climbing-stairs.js

Lines changed: 70 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,81 @@
66

77
// @lc code=start
88
/**
9+
* 这个方式比较巧妙,使用的是动态规划
910
* @param {number} n
1011
* @return {number}
1112
*/
13+
var climbStairs2 = function(n) {
14+
let p = q = 0, r = 1;
15+
// 这里的核心是 f(x) = f(x - 1) + f(x - 2) 这套公式
16+
// 在不断的循环中,去更新这几个
17+
for (let i = 0; i < n; i++) {
18+
p = q;
19+
q = r;
20+
r = p + q;
21+
}
22+
23+
return r;
24+
};
25+
26+
/**
27+
* 这是尾递归版本,内存优化较好
28+
* @param {*} n
29+
* @returns
30+
*/
1231
var climbStairs = function(n) {
13-
if (n === 1) {
14-
return 1;
32+
/**
33+
* 这里是采用优化版本的递归方式
34+
*/
35+
let fibonacci = function (n, n1 = 1, n2 = 1) {
36+
if (n <= 1) {
37+
return n2;
1538
}
16-
if (n === 2) {
17-
return 2;
39+
return fibonacci(n - 1, n2, n1 + n2);
40+
}
41+
return fibonacci(n);
42+
};
43+
44+
/**
45+
* 这是递归版本,但做了缓存优化
46+
* @param {*} n
47+
* @returns
48+
*/
49+
var climbStairs3 = function(n) {
50+
/**
51+
* 这里是采用优化版本的递归方式
52+
*/
53+
let fibonacci = (function () {
54+
// 使用对象来缓存数据,防止重复计算
55+
let memory = {};
56+
return function (n) {
57+
if (memory[n] !== undefined) {
58+
return memory[n];
59+
}
60+
return memory[n] = n === 1 || n === 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
1861
}
19-
return climbStairs(n - 1) + climbStairs(n - 2);
62+
})();
63+
return fibonacci(n);
64+
// 下面是未优化的版本,内存效率很低
65+
// if (n === 1 || n === 2) {
66+
// return 1;
67+
// }
68+
// if (n === 2) {
69+
// return 2;
70+
// }
71+
// return climbStairs(n - 1) + climbStairs(n - 2);
2072
};
2173
// @lc code=end
74+
75+
/**
76+
* 斐波那契数列的求和方式
77+
*/
78+
let fibonacci = (function () {
79+
let memory = {};
80+
return function (n) {
81+
if (memory[n] !== undefined) {
82+
return memory[n];
83+
}
84+
return memory[n] = n === 1 || n === 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
85+
}
86+
})();

0 commit comments

Comments
(0)

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