【剑指Offer】简单部分每日五题 - Day 1
今天开始更新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的更多相关文章
- 《剑指offer》第二十五题(合并两个排序的链表)
// 面试题25:合并两个排序的链表 // 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按 // 照递增排序的.例如输入图3.11中的链表1和链表2,则合并之后的升序链表如链 ...
- 《剑指offer》第十五题(二进制中1的个数)
// 面试题:二进制中1的个数 // 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如 // 把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. #inclu ...
- 剑指Offer(二十五):复杂链表的复制
剑指Offer(二十五):复杂链表的复制 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...
- 剑指Offer(三十五):数组中的逆序对
剑指Offer(三十五):数组中的逆序对 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...
- 剑指offer——python【第54题】字符流中第一个不重复的字符
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...
- 剑指offer——python【第60题】把二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行.#类似于二维列表[[1,2],[4,5]] 解题思路 其实这倒题和其他类似的题有所区别,这里是分层打印,把每层的节点值放在同一 ...
- 剑指offer——python【第30题】连续子数组的最大和
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...
- 剑指offer——python【第28题】数组 中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 剑指offer——python【第43题】左旋转字符串
题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果.对于一个给定的字符序列S,请你把其循环左移K位后的序列输出.例如,字符序列S=”abc ...
随机推荐
- 基于Python的Flask基础知识
Flask简介 Flask 是一个使用 Python 编写的轻量级 Web 应用程序框架.Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask. 下面我们简单 ...
- windows安装fdfs_client-py-master.zip 出现 error: Microsoft Visual C++ 14.0 is required.
背景:学习django+fdfs+nginx时碰见的问题,笔记本电脑的虚拟机ubuntu实在卡到怀疑人生,所以django装在windows,ubuntu只开启fdfs+nginx服务.于是就有在wi ...
- Gas Station(Medium)
1.在做pat的to fill or not to fill的时候想起同样是加油站的题目,于是翻出来复习一下 2.关键在于理解潜在的条件.假设油量为tank,如果到了当前站i,tank<0,即不 ...
- 百度AI技术
利用百度提供接口,实现智能语音 语音合成 -- TTS(text to speech) 注册 在 ai.baidu.com 页面中点击 控制台 ,弹出登陆 / 注册页面 创建应用 登陆成功后,点击左侧 ...
- python3下应用pymysql(第三卷)(数据自增-用于爬虫)
在上卷中我说出两种方法进行数据去重自增,第一种就是在数据库的字段中设置唯一字段,二是在脚本语言中设置重复判断再添加(建议,二者同时使用,真正开发中就会用到) 话不多说先上代码 第一步: 确定那一字段的 ...
- Python-删除多级目录
def rmdirs(top): for root, dirs, files in os.walk(top, topdown=False): # 先删除文件 for name in files: os ...
- JAVA中String类的比较
首先给大家看一段代码 package javaapptest; public class JavaAppTest { public static void main(String[] args) { ...
- form组件及cookie和session
多对多关系表的三种创建方式 1.全自动创建 优势:不需要你手动创建第三张表 不足:由于第三张表不是你手动创建的,也就意味着,第三张表字段是固定的无法更改 class Book(models.Model ...
- iOS多线程开发之GCD(死锁篇)
上篇和中篇讲解了什么是GCD,如何使用GCD,这篇文章将讲解使用GCD中将遇到的死锁问题.有兴趣的朋友可以回顾<iOS多线程开发之GCD(上篇)>和<iOS多线程开发之GCD(中篇) ...
- scss入门学习(一)
sass的文件后缀名 sass是目前流行的css预处理语言.sass有两种后缀文件,一种是.sass,不允许使用大括号和分号:另一种是.SCSS,允许使用大括号和分号,类似于我们平时写css的语法习惯 ...