226. 翻转二叉树

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val, left, right) {
  4. * this.val = (val===undefined ? 0 : val)
  5. * this.left = (left===undefined ? null : left)
  6. * this.right = (right===undefined ? null : right)
  7. * }
  8. */
  9. /**
  10. * @param {TreeNode} root
  11. * @return {TreeNode}
  12. */
  13. var invertTree = function(root) {
  14. if (root === null) {
  15. return root
  16. }
  17. const tmp = root.left
  18. root.left = root.right
  19. root.right = tmp
  20. invertTree(root.left)
  21. invertTree(root.right)
  22. return root
  23. };

189 轮转数组

  1. /**
  2. * @param {number[]} nums
  3. * @param {number} k
  4. * @return {void} Do not return anything, modify nums in-place instead.
  5. */
  6. // 用额外数组存即可 (i + k)% nums.length
  7. var rotate = function(nums, k) {
  8. let len = nums.length
  9. let list = new Array(len).fill(0)
  10. for (let i = 0; i < len; i++) {
  11. list[(i + k) % len] = nums[i]
  12. }
  13. // 这里为什么要额外处理一次
  14. for (let i = 0; i < len; ++i) {
  15. nums[i] = list[i];
  16. }
  17. return nums
  18. };

624,给表达式添加运算符

  1. var addOperators = function(num, target) {
  2. const n = num.length;
  3. const ans = [];
  4. let expr = [];
  5. const backtrack = (expr, i, res, mul) => {
  6. if (i === n) {
  7. // 终止条件
  8. if (res === target) {
  9. ans.push(expr.join(''));
  10. }
  11. return;
  12. }
  13. const signIndex = expr.length;
  14. if (i > 0) {
  15. expr.push('');
  16. }
  17. let val = 0;
  18. // 枚举截取的数字长度(取多少位),注意数字可以是单个 0 但不能有前导零
  19. for (let j = i; j < n && (j === i || num[i] !== '0'); ++j) {
  20. val = val * 10 + num[j].charCodeAt() - '0'.charCodeAt();
  21. expr.push(num[j]);
  22. if (i === 0) { // 表达式开头不能添加符号
  23. backtrack(expr, j + 1, val, val);
  24. } else { // 枚举符号
  25. expr[signIndex] = '+';
  26. backtrack(expr, j + 1, res + val, val);
  27. expr[signIndex] = '-';
  28. backtrack(expr, j + 1, res - val, -val);
  29. expr[signIndex] = '*';
  30. backtrack(expr, j + 1, res - mul + mul * val, mul * val);
  31. }
  32. }
  33. expr = expr.splice(signIndex, expr.length - signIndex)
  34. }
  35. backtrack(expr, 0, 0, 0);
  36. return ans;
  37. }

647. 回文子串

  1. var countSubstrings = function(s) {
  2. const n = s.length;
  3. let ans = 0;
  4. for (let i = 0; i < 2 * n - 1; ++i) {
  5. let l = i / 2, r = i / 2 + i % 2;
  6. while (l >= 0 && r < n && s.charAt(l) == s.charAt(r)) {
  7. --l;
  8. ++r;
  9. ++ans;
  10. }
  11. }
  12. return ans;
  13. };

12. 整数转罗马数字