105. 从前序与中序遍历序列构造二叉树
/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val = (val===undefined ? 0 : val)* this.left = (left===undefined ? null : left)* this.right = (right===undefined ? null : right)* }*//*** @param {number[]} preorder* @param {number[]} inorder* @return {TreeNode}*/var buildTree = function(preorder, inorder) {if(!inorder.length) return nulllet temp = preorder[0]let mid = inorder.indexOf(temp)let root = new TreeNode(temp)// 这里递归怎么计算的root.left = buildTree(preorder.slice(1,mid+1), inorder.slice(0,mid))root.right = buildTree(preorder.slice(mid+1), inorder.slice(mid + 1))return root};
剑指 Offer 10- II. 青蛙跳台阶问题
/*** @param {number} n* @return {number}*/// dp[1] = 1// dp[2] = 2// dp[3] = dp[2] + dp[1]function numWays(n) {// 为什么是n + 1, 0 => nconst dp = new Array(n + 1);[dp[0], dp[1]] = [1, 1];for (let i = 2; i <= n; i++) {dp[i] = (dp[i - 1] + dp[i - 2]) % 1000000007;}return dp[n];}
384. 打乱数组
/*** @param {number[]} nums*/var Solution = function(nums) {this.originNums = [...nums]this.nums = nums};/*** @return {number[]}*/Solution.prototype.reset = function() {this.nums = [...this.originNums]return this.nums};/*** @return {number[]}*/Solution.prototype.shuffle = function() {let list = []while(this.nums.length) {const index = Math.floor(this.nums.length * Math.random())list.push(this.nums.splice(index, 1))}this.nums = [...list]return list};/*** Your Solution object will be instantiated and called as such:* var obj = new Solution(nums)* var param_1 = obj.reset()* var param_2 = obj.shuffle()*/
25. K 个一组翻转链表
198. 打家劫舍
/*** @param {number[]} nums* @return {number}*/// dp[i] = max(nums[i] + dp[i - 2], dp[i - 1])var rob = function(nums) {let pre = 0, cur = 0, tmp;for(let num of nums) {tmp = cur;cur = Math.max(pre + num, cur);pre = tmp;}return cur};
64. 最小路径和
状态转移方程:
dp[i, j] = nums[i, j] + Min(dp[i, j - 1], dp[i - 1, j])
/*** @param {number[][]} grid* @return {number}*/var minPathSum = function(grid) {var dp = gridvar rowLen = grid.lengthvar colLen = grid[0].length// 初始化第一行for (let i = 1; i < colLen; i++) {dp[0][i] += dp[0][i - 1]}//初始化第一列for (let i = 1; i < rowLen; i++) {dp[i][0] += dp[i - 1][0]}for (let i = 1; i < rowLen; i++) {for (let j = 1; j < colLen; j++) {dp[i][j] = grid[i][j] + Math.min(dp[i][j - 1], dp[i - 1][j])}}return dp[rowLen - 1][colLen - 1]};
