/** * 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 {TreeNode} root * @return {TreeNode} */var invertTree = function(root) { if (root === null) { return root } const tmp = root.left root.left = root.right root.right = tmp invertTree(root.left) invertTree(root.right) return root};
189 轮转数组
/** * @param {number[]} nums * @param {number} k * @return {void} Do not return anything, modify nums in-place instead. */ // 用额外数组存即可 (i + k)% nums.lengthvar rotate = function(nums, k) { let len = nums.length let list = new Array(len).fill(0) for (let i = 0; i < len; i++) { list[(i + k) % len] = nums[i] } // 这里为什么要额外处理一次 for (let i = 0; i < len; ++i) { nums[i] = list[i]; } return nums};
624,给表达式添加运算符
var addOperators = function(num, target) { const n = num.length; const ans = []; let expr = []; const backtrack = (expr, i, res, mul) => { if (i === n) { // 终止条件 if (res === target) { ans.push(expr.join('')); } return; } const signIndex = expr.length; if (i > 0) { expr.push(''); } let val = 0; // 枚举截取的数字长度(取多少位),注意数字可以是单个 0 但不能有前导零 for (let j = i; j < n && (j === i || num[i] !== '0'); ++j) { val = val * 10 + num[j].charCodeAt() - '0'.charCodeAt(); expr.push(num[j]); if (i === 0) { // 表达式开头不能添加符号 backtrack(expr, j + 1, val, val); } else { // 枚举符号 expr[signIndex] = '+'; backtrack(expr, j + 1, res + val, val); expr[signIndex] = '-'; backtrack(expr, j + 1, res - val, -val); expr[signIndex] = '*'; backtrack(expr, j + 1, res - mul + mul * val, mul * val); } } expr = expr.splice(signIndex, expr.length - signIndex) } backtrack(expr, 0, 0, 0); return ans;}
var countSubstrings = function(s) { const n = s.length; let ans = 0; for (let i = 0; i < 2 * n - 1; ++i) { let l = i / 2, r = i / 2 + i % 2; while (l >= 0 && r < n && s.charAt(l) == s.charAt(r)) { --l; ++r; ++ans; } } return ans;};