• 【剑指Offer】简单部分每日五题


    05 - 替换空格

    要求:把字符串里的空格全部换成%20
    题解:循环一遍即可
    举一反三:多个连续空格只视为一个如何处理?①找到一个空格后向后找删除所有连续空格;②正则替换

    /**
     * @param {string} s
     * @return {string}
     */
    var replaceSpace = function(s) {
      let res = ''
      for (let i = 0; i < s.length; i++){
        res += (s.charAt(i)==' ' ? '%20' : s.charAt(i))
      }
      return res
    };
    

    06 - 从尾到头打印链表

    要求:反着打印链表
    题解:入栈,然后出栈即可

    /**
     * @param {ListNode} head
     * @return {number[]}
     */
    var reversePrint = function(head) {
      if (head == null) {return []}
      let stack = []
      while (head) {
        stack.push(head.val)
        head = head.next
      }
      let res = []
      while (stack.length != 0) { res.push(stack.pop()) }
      return res
    };
    

    10-I - 斐波那契数列

    要求:输出Fib数列第n项模1e9+7
    题解:设定迭代基础f(0)、f(1),迭代之

    /**
     * @param {number} n
     * @return {number}
     */
    var fib = function(n) {
      if (n == 0) return 0
      if (n == 1) return 1
      let a = 0, b = 1, c
      for (let i = 2; i <= n;i++) {
        c = a 
        a = b
        b = (c + b) % (1e9+7)
      }
      return b
    };
    

    24 - 反转链表

    要求:输入链表的头节点,反转链表,输出反转后的头节点
    题解:一画图就明白。主要是用r暂存原先的next以便继续操作

    /**
     * @param {ListNode} head
     * @return {ListNode}
     */
    var reverseList = function(head) {
      if (head == null) { return null }
      let p, q, r
      p = null, q = head
      while (q) {
        r = q.next
        q.next = p
        p = q
        q = r
      }
      return p
    };
    

    25 - 合并两个排序的链表

    要求:输入两个递增的链表,合并这两个链表为一个递增链表
    题解:两个指针一起走,哪个小就接哪个进去。注意①伪头结点的使用;②一个走到尾后另一个直接接后面,不用继续遍历

    /**
     * @param {ListNode} l1
     * @param {ListNode} l2
     * @return {ListNode}
     */
    var mergeTwoLists = function(l1, l2) {
      if (!l1 || !l2) { return l1 ? l1 : l2 }
      let res = new ListNode(-1), head = res
      while (l1 && l2) {
        if (l1.val < l2.val) {
          res.next = new ListNode(l1.val)
          res = res.next
          l1 = l1.next
        } else {
          res.next = new ListNode(l2.val)
          res = res.next
          l2 = l2.next
        }
      }
      res.next = (l1 ? l1 : l2)
      return head.next
    };
    
  • 相关阅读:
    在老王指导下第一次完成购物车!!!
    自己封装的getElementByClassName函数,解决部分浏览器不兼容的问题
    第一次用js实现window10日历----动态的哟!
    第一次完成注册页面!分享一下,哈哈哈!
    array和string的方法
    js关于函数全局变量和局部变量的区分
    CSS3的3D效果样式transform属性中的rotate3d
    css中的 权重
    margin padding 和边框线的使用
    图片bug
  • 原文地址:https://www.cnblogs.com/zxuuu/p/12497081.html
Copyright © 2020-2023  润新知