Leetcode
Waitfou
菜鸡研究生一枚
展开
-
剑指 Offer 14- I. 剪绳子
题目描述: 思路: 首先,该问题可以转化成: 已经n可以由m个数字k[0], k[1], k[2], k[3]...k[m-1]相加而成,也就是n=k[0]+k[1]+k[2]+...,又很多种可能,但是必须保证n>1, m>1,求得最佳的方案,使得 k[0]*k[1]*k[2]*的乘积最大。并返回这个最大乘积 经过公式推导(具体公式推导在下方),当长度被平均划分为多个3组成的时候,最后得到的乘积结果,最大,但是往往并不是恰好能分为多个3构成,假设能划分为l个3加上最后的一个长度b原创 2022-05-17 10:59:13 · 213 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围
题目描述: 思路总结: 思路:采用递归的思想 对于一个格子,如果满足要求(它的行坐标和列坐标的数位之和不大于k,同时坐标点的坐标要满足0≤i≤m, 0≤j≤n),那么就将该坐标格子的visited设置为visited[i][j]=true, 并依次递归访问其右、左、下、上的格子,如果其中(右、左、下、上)也满足条件,就递归,分别计算各自递归下的满足条件的格子数,最终基于坐标(i, j)的格子计算出的满足条件的格子=上递归结果+下递归结果+左递归结果+右递归结果+1(这个1是格子本身) 递归结束条原创 2022-05-16 15:26:27 · 200 阅读 · 0 评论 -
剑指 Offer 12. 矩阵中的路径
题目描述: 思路总结: 我们要设置一个visited,用于记录在当前还正确的路线中该格子是否访问过。 注意:并不是你一个格子访问过就把其设置为访问过,只有当格子访问过且已经纳入当前的正确路线的时候我们才将其visted设置为1。 下面是具体思路: 主要采用了2个技巧:visited访问表和递归的思想。visited表是和board表同样形状的二维表。 1、首先,那么我们继续按照从上到下,从左到右的顺序访问board表,直到遇到了和word单词中第一个字母相等的格子。然后设置这个格子.原创 2022-05-09 15:22:22 · 231 阅读 · 1 评论 -
剑指 Offer 07. 重建二叉树
一、题目描述: 二、思路描述: 本题目中的一个重要信息点是先序和中序序列的结果中均不含有重复的数字。针对于此,我们便可以设置一个唯一的键值对index,来得到中序序列中的每一个元素的索引值。 因此具体思路如下: 首先我们传入的是先序序列和中序序列。 1、首先从先序序列中得到树的根(先序序列的第一个元素) 2、然后我们就根据此根,在index中找出其在中序序列中的索引,进而划分树左子树和右子树。 如下所示: 先序序列中的构造总是如下所示: [ 根节点, [左子树的前序遍历结果], [右子原创 2022-05-09 11:11:00 · 241 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II
题目描述: 思路描述: 此题目同样还是在层次遍历的基础上进行延申的题目. 因此我们的思路还是在层次遍历的基础上进行操作.同样需要声明一个队列存放元素, 具体思路: 首先将根节点入队,然后循环判断队列是否为空,如果不为空,就出队并且访问元素,并且将其子节点入队.一直循环上述操作直到队列为空.需要注意的是,(在这里要求的是将同一层的输出结果放在一个vetor里面,不同的放在不同的vector里面.)因此我们需要知道每一层的节点个数. 又因为我们是一层一层遍历,因此一个循环里面恰好涉及的是一个层的原创 2022-04-27 20:24:58 · 112 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
题目要求: 思路: 这个题目属于树的层次遍历的延申. 首先把访问的根节点存入队列,然后把访问的每个节点的子节点存入队列中,然后依次访问队列中的每个元素,并打印出来,直到队列为空. 代码: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val原创 2022-04-27 19:50:37 · 958 阅读 · 0 评论 -
剑指 Offer 31. 栈的压入、弹出序列
题目要求: 解题思路: 用一个栈模拟入栈,出栈的顺序,如果最后能够将栈中元素全部弹出,那么就存在此出栈序列,否则便是没有. 具体伪代码如下: func(){ 初始化一个栈 while(入栈序列不为空){ 元素入栈 while(栈顶元素等于当前出栈元素){ 出栈 当前要出栈的元素变为为下一个元素 } } } 具体C++代码如下: cl...原创 2022-04-27 19:21:47 · 924 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
题目描述: 思路: 由于在数组中存在相同的元素,因此不能简单像「153. 寻找旋转排序数组中的最小值」题目一样,而是应该考虑如何让解决相同元素影响到「153. 寻找旋转排序数组中的最小值」中的数据规律. 例如: 1 1 2 2 3 3 4 4 旋转第一次:4 1 1 2 2 3 3 4 满足特点(我们考虑数组中的最后一个元素xx:在最小值右侧的元素,它们的值一定都小于等于xx;而在最小值左侧的元素,它们的值一定都大于等于x) 旋转第二次:4 4 1 1 2 2 3 3 满足特点 旋...原创 2022-04-26 20:44:43 · 343 阅读 · 0 评论 -
153. 寻找旋转排序数组中的最小值
题目: 思路: 由题目可知,无论旋转多少次的结果,对于该数组中的最后一个元素x,最小值的右方的元素永远小于x,最小值左方的元素永远大于该x. 因此,我们可以根据这一条性质,通过二分查找的方法找出最小值。 class Solution { public: int findMin(vector<int>& nums) { // 由题目可知,无论旋转多少次的结果,对于该数组中的最后一个元素x,最小值的右方的元素永远小于x,最小值左方的元素永远大于该x...原创 2022-04-26 16:10:32 · 182 阅读 · 0 评论