![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指Offer
Simpleholly
这个作者很懒,什么都没留下…
展开
-
剑指Offer:从尾到头打印链表(一刷)
题目描述:输入一个链表,从尾到头打印链表每个节点的值。 本题在开头用注释形式给出了链表类的成员变量名。 我的想法: 无论哪一种,最开始都是循环遍历得到链表的长度n。 第一种循环n次输出n个节点值;输出方法是嵌套一个循环,每次从head开始,时间复杂度为O(n^2)。 第二种是将链表改造为一个循环链表,然后用两层循环,第二层循环的第一次循环从head开始,循环n次,输出节点值,第二原创 2017-07-24 10:30:55 · 270 阅读 · 0 评论 -
剑指Offer:二叉树的镜像(一刷)
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5原创 2017-07-24 16:41:40 · 275 阅读 · 0 评论 -
剑指Offer:二叉树的深度(一刷)
题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 我的想法: 采用递归的思想,若该节点为叶子节点,则返回深度为0,若有左孩子或右孩子,则返回孩子中更深的深度并加1。 /* struct TreeNode { int val; struct TreeNode *left;原创 2017-07-24 21:51:21 · 330 阅读 · 0 评论 -
剑指Offer:不用加减乘除做加法(一刷)
题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 我的想法: 利用位运算。 1. 按位相与,得到的结果左移,模拟进位。若得到的结果为零,直接返回异或结果。 2. 按位异或,得到不进位时每位上的结果。 3. 递归,参数为1的结果和2的结果。 出现的问题: 如果if语句写成 if ( num1 & num2 == 0)原创 2017-07-24 22:08:50 · 259 阅读 · 0 评论 -
剑指Offer:变态跳台阶(一刷)
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 我的想法: 递归。该步的所有选择的结果相加,其结果用递归调用该函数获得。 class Solution { public: int jumpFloorII(int number) { if (number == 0原创 2017-07-24 22:44:23 · 261 阅读 · 0 评论 -
剑指Offer:构建乘积数组(一刷)
题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。 我的想法: 在纸上画了一个二维矩阵。 为减少循环和运算的次数,使每次计算结果尽量能够得到使用。 声明了两个数组,循环,分别保存上三角和下三角(均不包含对原创 2017-07-25 17:15:48 · 294 阅读 · 0 评论 -
剑指Offer:用两个栈实现队列(一刷)
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 我的想法: push操作时,push进stack1 pop操作时,先把stack1的逐个push进stack2,pop掉stack2的栈顶元素后,原样push回stack1。 class Solution { public: void push(int原创 2017-07-25 22:25:25 · 265 阅读 · 0 评论