剑指offer
jaybroker
这个作者很懒,什么都没留下…
展开
-
剑指offer 二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像思路:递归,从上到下,交换即可。class Solution {public: void Mirror(TreeNode *pRoot) { if(pRoot == NULL) return; TreeNode *left,*right; left = pRoot原创 2017-03-01 20:48:09 · 187 阅读 · 0 评论 -
剑指offer 对称的二叉树
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:既然是对称的,那么二叉树的节点个数肯定是奇数,偶数排除。那么中序遍历的结果也肯定是对称的。所以,通过中序遍历,然后对称的值。当然要处理特殊情况啦。那就是存在单个孩子的节点,一个是左孩子,一个是右孩子,他们的值是相同的,这样就会出现判断错误的问题,那么我们在出现这种情况时,自己添加原创 2017-02-26 21:21:40 · 205 阅读 · 0 评论 -
剑指offer 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路:既然是旋转数组, 那么数据的规律肯定是保持非递减,但遇到第一个递减的数时,就是最小的数了,特殊情况下,数组一直保持非递原创 2017-02-26 19:31:46 · 201 阅读 · 0 评论 -
剑指offer 替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路:先找出字符串中有多少个空格(len),那么字符串总体向后移动的距离就可以得出(len*3-len),然后整体向后移动,遇到空格时将%20添加进去即可。class Solution {public: void replac原创 2017-02-26 19:22:26 · 329 阅读 · 0 评论 -
剑指offer 二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:从每行的最后一个数开始,如果所查找的数大于当前值,那么行数加一。如果等于直接返回true;class Solution {public: bool Find(int target, vector > a原创 2017-02-26 18:57:48 · 175 阅读 · 0 评论 -
剑指offer 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。思路:e后面不能有小数点的出现,出现e后判断下一位是不是数字,不是就为false,小数点出现后判断下一位是不是数字,不是就为false。小数点最多出原创 2017-02-23 23:07:38 · 532 阅读 · 0 评论 -
剑指offer 序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树。思路:主要是区分空节点,val之间用特殊符号隔开,例如用 ‘-’表示节点分隔符,当遇到空节点时用#表示,按层遍历即可,当然也可以用其他遍历方式 。磕磕绊绊也算是AC了。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *原创 2017-02-22 23:12:53 · 192 阅读 · 0 评论 -
剑指offer 机器人的运动范围
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路:深搜。递归的访问当前坐标的上下左右。访原创 2017-02-22 20:54:43 · 202 阅读 · 0 评论 -
剑指offer 66题 矩阵中的路径
第一次发剑指offer的博客。做了一晚上的题,做哭了。结果是审题出错了。必须记下来。请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如[a b c e s f c s a d e e]是3*4矩阵,其包原创 2017-02-21 23:00:25 · 317 阅读 · 0 评论 -
剑指offer 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个结点。思路:遍历链表,将所有指针存在一个vector里面,最后输出第n-k个节点即可。class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead==NULL||k==0)原创 2017-03-01 21:00:07 · 194 阅读 · 0 评论 -
剑指offer 字符串的排列
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路:题目中会出现重复的字母,这里采用了取巧的办法,使用了C++的map来实现,首先map可以过滤到重复的字符串,其次map还可以原创 2017-02-26 19:51:01 · 308 阅读 · 0 评论