![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
刷题记录
本栏主要为了记录自己的刷题过程,鞭策自己
贝勒里恩
用生命写代码,用灵魂做界面!
展开
-
找出二叉树的根到所有叶子的路径
思路比较简单:主要的想法就是得到所有子树的路径,然后和根组合在一起。如果是根节点,就root->val加入vector并返回.如果不是根结点,那就对左右子树递归,得到以他们为根的路径。vector<string> Print_Path(Node *root)//找出二叉树的根到所有叶子的路径{ vector<string> re, leftPath, rig...原创 2020-02-25 23:31:19 · 483 阅读 · 0 评论 -
反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。题目分析:对于链表问题,一定要注意是否带有头结点,因为有无头结点在编程时存在一些细节需要注意。对于链表的反转有两种办法:1、头插法:将结点逐个从链表中摘下,并将该节点插入头结点之后。2、原地反转:如果访问结点不为空,记下当前结点(记录结点),访问结点后移,记录结点指向头结点,头结点指向记录结点。具体代码:不带头结点原地反转/*st...原创 2020-03-27 12:27:04 · 117 阅读 · 0 评论 -
链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。题目分析:对于求链表中的倒数第k个结点,由于链表不能随机访问,只能顺序访问,所以我们可以采用快慢指针法进行求解。具体步骤为:快指针先走k步,然后快、慢指针同时走,当快指针到达链表末端时,慢指针此时指向的就是倒数第k个结点。这个题目有几个特殊情况需要注意一下:1、当链表为空时:也就不存在倒数第几个结点了,直接返回空指针;2、当k<=0...原创 2020-03-27 11:05:40 · 157 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。例如:2,1,4,5,3,6 变为 1,5,3,2,4,6题目分析:以空间换时间,所以我们开辟一个数组,先遍历一遍原数组将奇数的值存在新数组前面,再遍历一遍将偶数的值存在新数组的后面。具体代码:class Solu...原创 2020-03-26 11:51:33 · 198 阅读 · 0 评论 -
数值的整数次方
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0题目分析:对于求一个数的幂,我们可以这样转化。例如求10^3,我们可以将3化为二进制0011,所以10^3=10^0011=10^0001 * 10^0010=10^1 * 10^2=10*100=1000。所以我们只需要将指数的二进制...原创 2020-03-26 11:06:49 · 152 阅读 · 0 评论 -
二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。题目分析:求二进制表示中1的个数,常规的思维是先将这个数转化为二进制,然后逐位访问判断进行累加。现在我们换一种思路,利用位操作符进行求解。我们用一个unsigned int flag=1与该数进行逐位与操作,如果结果不为0,则累加;然后对flag进行循环左移1位的操作更新flag。如此操作下来,就可以求出二进制中1的个数了...原创 2020-03-25 16:49:33 · 131 阅读 · 0 评论 -
矩形覆盖
题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:题目分析:对于这种题型我们可以采取找规律的方法来解答,显然F(0)=0,F(1)=1,F(2)=2,F(3)=3,那么F(4)=?我们可以试着画一下:显然只有以上5种覆盖方案,所以F(4)=5,我们已经可以观测到...原创 2020-03-25 16:19:37 · 142 阅读 · 0 评论 -
变态跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目分析:对于这样的题目,我们不妨先举一个实例进行分析,例如n=5时,无非就是下面七种跳法,只是顺序可变,然后就把问题转变为排列组合的问题了。跳法一:5个1跳法二:1个2,3个1跳法三:2个2,1个1跳法四:1个3,2个1跳法五:1个3,1个2跳法六:1个4,1个1...原创 2020-03-24 12:05:23 · 143 阅读 · 1 评论 -
跳台阶
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题目分析:对于这样的题目,我们不妨先举一个实例进行分析,例如n=5时,无非就是下面三种跳法,只是顺序可变,然后就把问题转变为排列组合的问题了。跳法一:0个2,5个1跳法二:1个2,3个1跳法三:2个2,1个1相同元素的排列组合问题,我们可以采取隔板法进行分析,例...原创 2020-03-24 11:51:14 · 125 阅读 · 0 评论 -
斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39题目分析:斐波那契数列的递推公式为:F(n)=F(n-1)+F(n-2) n>=3F(0)=0,F(1)=1所以斐波那契数列为:0、1、1、2、3、5、8、13、21、34、…现要根据一个整数n,输出斐波那契数列的第n项,我们可以依据递推公式求累加和,求...原创 2020-03-23 16:10:22 · 310 阅读 · 0 评论 -
旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解体思路:旋转数组就是将数组最开始的n个数值依次追加到数组的末尾,所以非递减旋转数组是由两部分有序的子数组组成...原创 2020-03-23 15:57:21 · 133 阅读 · 0 评论 -
用两个栈实现一个队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。问题分析:栈的特点是先进后出,队列的特点是先进先出。入栈再出栈就会翻转顺序,两次同样的操作就会变回来。所以我们只需在一个栈中存数据,一个栈中出数据即可。这里有一点需要注意,出栈时有以下几种情况:1、stack2不为空;2、stack2为空,但stack1不为空;3、stack2为空,stack1也为空...原创 2020-03-01 21:51:17 · 128 阅读 · 0 评论 -
重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解体思路:对于树的先序遍历和中序遍历有如下特点:先序遍历的第一个节点肯定是根节点,中序遍历中根结点的两边分别是左子树、右子树。所以只要知道一个先序遍历和...原创 2020-03-01 17:05:03 · 165 阅读 · 0 评论 -
从尾到头打印链表
题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。题目分析:从尾到头其实就是链表的反转,链表常见的反转方法有两种,1、头插法反转;2、原地反转。本题还可以借助栈的前进后出特性实现链表的反转输出,先遍历一次链表将结果存入栈中,然后从栈中依次取出栈顶元素压入数组(vector)中。/*** struct ListNode {* int val;* ...原创 2020-02-26 11:06:41 · 145 阅读 · 0 评论 -
空格替换
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。题目分析:要将空格替换成"%20",也就是说一个空格要补三个字符,所以每出现一个空格,字符串长度就会增加2。所以我们先遍历求出字符串中的空格数,然后计算出所有空格被替换完后字符串应有的长度,然后从后面开始复制。代码如下:cla...原创 2020-02-26 10:17:26 · 182 阅读 · 0 评论 -
二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。题目分析:依据题目意思,我们可以举一个这样的二维数组例子来分析,左下最外层和数组的右上最外层就已经包含数组中所有出现数字的取值;而且数组的每条副对角线元素都相同,所以有***两种方法***去遍历...原创 2020-02-26 09:23:20 · 204 阅读 · 0 评论