今天开始更新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. python-django框架-电商项目-首页开发_20191122

    python-django框架-电商项目-首页开发 业务背景: 用户浏览网站一定是先到首页, 没有登陆的话首页内容完全一样,而且是不经常变化的, 一段时间内,有100用户访问,就要有几个用户就要查询多 ...

  2. python学习笔记(11)文件操作

    一.读文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直 ...

  3. mysql简介/安装以及破解密码等

    1.什么是数据库: 数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的 过去人们将数据存放在文件柜里,现在数据量庞大,已经不再适用 数据库是长期存放在计算机内.有 ...

  4. 网络TCP/IP分层、子网掩码等基本概念

    一.TCP/IP分层: OSI七层网络模型 TCP/IP四层概念模型 对应网络协议 应用层(Application) 应用层 HTTP.TFTP, FTP, NFS, WAIS.SMTP 表示层(Pr ...

  5. Nginx笔记总结四:Nginx连接PHP5.4

    location ~ .*\.(php)?${ expires -ls; try_file $uri=404; fastcgi_split_path_info ~(.+\.php)(/.+)$; in ...

  6. 如何有效地报告Bug

    英文原文:Simon Tatham,编译:Dasn 引言 为公众写过软件的人,大概都收到过很拙劣的bug报告,例如: 在报告中说“不好用”: 所报告内容毫无意义: 在报告中用户没有提供足够的信息: 在 ...

  7. 云服务器——之Linux下安装nginx

    第一步:下载 Nginx,下载地址:http://nginx.org/download/nginx-1.6.2.tar.gz 第二步:安装nginx需要安装的一些环境: 1.例如: yum insta ...

  8. Python---11模块

    在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很 ...

  9. 教你win7关闭开机动画,大幅度加快开机时间

    Win7系统如何关闭开机动画 Win7系统开机动画关闭教程,以前我们说过很多种帮助Win7开机加速的方法,比如减少Win7开机启动的程序.服务或计划任务等.不过这些都优化都是针对已经进入Win7系统后 ...

  10. POI之下载模板(或各种文件)

    该例基于Nutz框架 前台代码: <a href="" id="errordownload" onclick="downloadErrorLog ...