今天开始更新leetcode上《剑指Offer》的题解,先从简单难度开始。预计按下列顺序更新:

  • 简单难度:每日5题
  • 中等难度:每日3题
  • 困难难度:每日1题

17 - 打印从1到最大的n位数

要求:比如打印三位数,就从1打印到999。以此类推。

题解:数据范围很小不怕越界,暴力从\(1\)打到\(10^n-1\)即可。

/**
* @param {number} n
* @return {number[]}
*/
// 10^n - 1
var printNumbers = function(n) {
let r = []
for (let i = 1; i < Math.pow(10, n); i++) {
r.push(i)
}
return r
};

22 - 链表中倒数第k个节点

要求:输出该链表中倒数第k个节点。(最后一个节点称为倒数第1个)

题解:很容易想到快慢指针。快指针先走k步,然后快慢指针一起走。快指针到尾部时,慢指针即指向结果。

/**
* @param {ListNode} head
* @param {number} k
* @return {ListNode}
*/
var getKthFromEnd = function(head, k) {
let fast = head, slow = head
for (let i = 0; i < k - 1; i++) {
fast = fast.next
}
while (fast.next) {
fast = fast.next
slow = slow.next
}
return slow
};

27 - 二叉树的镜像

要求:输入二叉树,输出它的镜像(每个结点左右子树互换)。

题解:对每个结点都交换左右子树,不难想到递归处理(自下而上)。

/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var mirrorTree = function(root) {
if (root == null) { return null } let backup = root.left
root.left = root.right
root.right = backup mirrorTree(root.left)
mirrorTree(root.right)
return root
};

55-I - 二叉树的深度

要求:输入二叉树,输出深度。

题解:递归向深处探索。递归函数附加一个参数记录当前深度。

/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function(root) {
if (root == null) { return 0 }
let res = 0
let deepWalk = function(root, depth) {
if (root.left) { deepWalk(root.left, depth + 1) }
if (root.right) { deepWalk(root.right, depth + 1) }
res = depth > res ? depth : res
}
deepWalk(root, 1)
return res
};

58-II - 左旋转字符串

要求:左旋转指将字符串头k个字符顺序移动到末尾。

题解:字符串切片后拼接、字符串翻倍后截取都可以完成。这里用数学规律“假装”字符串翻倍处理之。

不妨举例,可清楚发现规律:

下标:  01 23456 7      k=2
字符串:abcde len=5
结果: ab|cdeab|cde
分析: 5->0 6->1 ---> mod 5
/**
* @param {string} s
* @param {number} n
* @return {string}
*/
var reverseLeftWords = function(s, n) {
let len = s.length, res = ''
for (let i = n; i < len + n; i++) {
res += s.charAt(i % len)
}
return res
};

【剑指Offer】简单部分每日五题 - Day 1的更多相关文章

  1. 《剑指offer》第二十五题(合并两个排序的链表)

    // 面试题25:合并两个排序的链表 // 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按 // 照递增排序的.例如输入图3.11中的链表1和链表2,则合并之后的升序链表如链 ...

  2. 《剑指offer》第十五题(二进制中1的个数)

    // 面试题:二进制中1的个数 // 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如 // 把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. #inclu ...

  3. 剑指Offer(二十五):复杂链表的复制

    剑指Offer(二十五):复杂链表的复制 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...

  4. 剑指Offer(三十五):数组中的逆序对

    剑指Offer(三十五):数组中的逆序对 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...

  5. 剑指offer——python【第54题】字符流中第一个不重复的字符

    题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...

  6. 剑指offer——python【第60题】把二叉树打印成多行

    题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行.#类似于二维列表[[1,2],[4,5]] 解题思路 其实这倒题和其他类似的题有所区别,这里是分层打印,把每层的节点值放在同一 ...

  7. 剑指offer——python【第30题】连续子数组的最大和

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...

  8. 剑指offer——python【第28题】数组 中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  9. 剑指offer——python【第43题】左旋转字符串

    题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abc ...

随机推荐

  1. 98)PHP,文件类型获取和创建文件夹

    看手册  finfo这个类:This class provides an object oriented interface into the fileinfo functions. 这个$mime_ ...

  2. Qt error C2338: No Q_OBJECT in the class with the signal错误解决办法(无法编译过信号与槽)

    由于没有继承QObject类而引起的 只需继承QObject类即可 如果已经继承了QObject类,编译还出现错误 将QObject类放在最前面继承:public QObject 最后即可编译通过

  3. 羽翼sqlmap视频笔记

    access 注入 ./sqlmap.py -u "url"          注入判断./sqlmap.py -u "url" --tables  跑表./s ...

  4. Spring中Bean的不同配置方式

    Bean的配置方式一共分为三种: 1.基于XML(适用于第三方类库,无法在类中写注解以及写命名空间的配置等情况) 2.基于注解(适用于大部分情况) 3.基于Java类 以下是三种不同情况的配置方式   ...

  5. python练习题——猜数字游戏

    增加了按照对半找数的方法来计算最短几次就可以猜到随机数,决定到游戏结束共猜数的次数: from random import * import numpy as np from numpy import ...

  6. [LC] 54. Spiral Matrix

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  7. js页面--年份自动增加

    ) { document.write("-" + new Date().getFullYear()); }</script> // 大于2017年自动加上 - 年份

  8. 吴裕雄--python学习笔记:sqlite3 模块

    1 sqlite3.connect(database [,timeout ,other optional arguments]) 该 API 打开一个到 SQLite 数据库文件 database 的 ...

  9. SWUST OJ 有趣的三位数(0319)

    有趣的三位数(0319) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 158 Accepted: 62   Description ...

  10. 吴裕雄--天生自然 python数据分析:基于Keras使用CNN神经网络处理手写数据集

    import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib.image as mp ...