zoukankan      html  css  js  c++  java
  • 【剑指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
    };
    
  • 相关阅读:
    645. 错误的集合
    88. 合并两个有序数组
    125. 验证回文串
    常用的浏览器
    网页的相关概念
    HTML简介
    商城搜索解决方案
    用VirtualBox安装Centos7
    Eureka自我保护机制
    服务发现Discovery(查看运行的服务)
  • 原文地址:https://www.cnblogs.com/zxuuu/p/12497081.html
Copyright © 2011-2022 走看看