剑指offer
王老桔
这个作者很懒,什么都没留下…
展开
-
《剑指offer》--004--二维数组中的查找(杨氏矩阵)
《剑指offer》–目录索引题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路: ①因为从左到右递增,从上到下递增,则每行的最后一列的元素是其所属行中最大的,又是其所属列中最小的,我们以二维数组中右上角元素为起点,暂且称它为顶角元素; ②当原创 2018-01-18 14:43:45 · 372 阅读 · 0 评论 -
《剑指offer》--008--二叉树的下一个结点
《剑指offer》–目录索引题目: 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针思路: 代码如下:#include <iostream>using namespace std;typedef int DataType;typedef struct...原创 2018-04-11 20:20:18 · 182 阅读 · 0 评论 -
《剑指offer》--006--从尾到头打印链表
《剑指offer》–目录索引题目: 输入一个链表的头结点,从尾到头反过来打印出每个结点的值思路: 递归和非递归都很简单,直接上代码代码如下:#include <iostream>#include <stack>using namespace std;typedef int DataType;typedef struct L...原创 2018-04-11 16:49:28 · 169 阅读 · 0 评论 -
《剑指offer》--007--重建二叉树
《剑指offer》–目录索引题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1, 5, 3, 8, 6},则重建出图所示的二叉树并输出它的头结点。 思路: 递归实现,如下图: 代码如下...原创 2018-04-10 16:37:52 · 192 阅读 · 0 评论 -
《剑指offer》--目录索引
《剑指offer》–004–二维数组中的查找(杨氏矩阵) 《剑指offer》–005–替换字符串中的空格《剑指offer》–006–从尾到头打印链表《剑指offer》–007–重建二叉树《剑指offer》–008–二叉树的下一个结点 《剑指offer》–009–用两个栈实现队列《剑指offer》–010–斐波那契数列 《剑指offer》–011–旋转数组中的最小数字...原创 2018-01-30 19:34:09 · 1109 阅读 · 0 评论 -
《剑指offer》--017--打印1到最大的n位数
题目: 输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。思路: ①字符串累加 详细见代码:int StringAdd(char* number,int n)//字符串累加(代替数字累加){ int i=n-1;//数组最后一个位置作为个位数开始累加 for(;i>=0;i--) {原创 2018-02-01 15:42:03 · 329 阅读 · 0 评论 -
《剑指offer》--016--数值的整数次方
《剑指offer》–目录索引题目: 实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。思路: 一般算法: ①exponent >= 0,循环exponent次,使得base自乘exponent次; ②exponent 代码如下:int E原创 2018-01-29 15:09:54 · 223 阅读 · 0 评论 -
《剑指offer》--015--二进制中1的个数
《剑指offer》–目录索引题目: 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。 例如:把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。思路: 一般算法:很简单地会想到将二进制中的每一位和1做按位与&运算,就能得到二进制中1的个数; 进阶算法:首先,有个规律:“一个数持续循环地与它本身减一做按位与运算,循环次数就是二进制中原创 2017-10-12 20:12:25 · 372 阅读 · 0 评论 -
《剑指offer》--014--剪绳子
《剑指offer》–目录索引题目: 给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0] * k[1]*…*k[m]可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。前提: 该题有两种解法:①动态规划;②贪婪算法 个人觉原创 2018-01-26 16:55:53 · 416 阅读 · 0 评论 -
《剑指offer》--013--机器人的运动范围
《剑指offer》–目录索引题目: 地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动,它 每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和 大于k的格子。例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。 但它不能进入方格(35, 38),因为3+5+3+8=19。请问该机器人能够到达多少个格原创 2018-01-24 15:49:16 · 313 阅读 · 0 评论 -
《剑指offer》--012--矩阵中的路径
《剑指offer》–目录索引题目: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有 字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左、右、 上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入 该格子。例如在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字 母用下划线标出)。但矩阵中不包含字符串原创 2018-01-25 11:54:29 · 365 阅读 · 0 评论 -
《剑指offer》--011--旋转数组中的最小数字
《剑指offer》–目录索引题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组 {3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。思路: 最简单直接的方法就是顺序查找,时间复杂度为0(n),但是这样就没有用到旋转数组的特性了原创 2018-01-22 11:45:21 · 270 阅读 · 0 评论 -
《剑指offer》--010--斐波那契数列
《剑指offer》–目录索引题目: 写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下: 一般算法:(时间复杂度为O(2^n))long long Fib(size_t n)//递归{ if(n == 0) { return 0; } if(n == 1) { return 1;原创 2018-01-20 21:58:54 · 468 阅读 · 0 评论 -
《剑指offer》--005--替换字符串中的空格
《剑指offer》–目录索引题目: 请实现一个函数,将一个字符串中的空格替换成“%20”。 例如,当字符串为We Are Happy. 则经过替换之后的字符串We%20Are%20Happy。 (要求时间复杂度为O(n))思路: 这道题的难点在于要求使用O(n)的算法,不然很简单直接使用暴力替换; ①首先遍历一遍字符串,计算出字符串中的空格数co原创 2018-01-19 13:13:41 · 344 阅读 · 0 评论 -
《剑指offer》--009--用两个栈实现队列
《剑指offer》–目录索引题目: 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能思路: 简单,直接上手代码如下:#pragma once#include <stack>#include <iostream>using nam...原创 2018-04-17 20:20:53 · 205 阅读 · 0 评论