leetcode
记录ac历程
土豆丝炒土豆
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
矩阵中的路径
方法:dfs+剪枝 思路: dfs: 1、递归参数: 矩阵元素的位置i,j,字符串中的位置k 2、终止条件: false:i,j不在合法范围 矩阵元素与字符串元素不同 矩阵元素已经访问过了 true: k的位置正好到字符串末尾 3、递推过程 a、标记当前矩阵元素,置为空‘\0’; b、搜索下一个单元格,上下左右四个方向,bool res = dfs采用||,满足一个即可 c、还原当前矩阵元素,board[i][j]=word[k]; 4、返回值: 返回false or true class Solutio.原创 2022-02-26 23:50:11 · 151 阅读 · 0 评论 -
整数转罗马数字
模拟法: 列表 思路:为了表示一个给定的整数num,寻找不超过num的最大符号值,用num减去该符号值,然后继续找不超过num的符号值,循环直至到0。最后得到的字符串就是num的罗马数字表示。 建立数值-符号对的列表valueSymbols,按数值从大到小排列。遍历每个数值-符号对,如果当前数值不超过当前num,则从num中不断减去value,直至num小于value,再遍历下一个数值-符号对。循环到num的值为0跳出循环。 const pair<int, string> valueSymbol原创 2022-02-23 21:22:27 · 249 阅读 · 0 评论 -
13.罗马数字转整数
思路:模拟法 通常情况下,罗马数字中小的数字在大的数字的右边。若输入的字符串满足该情况,那么可以将每个字符视作一个单独的值,累加每个字符对应的数值即可。 若存在小的数字在大的数字的左边的情况,根据规则需要减去小的数字。对于这种情况,我们也可以将每个字符视作一个单独的值,若一个数字右侧的数字比它大,则将该数字的符号取反。 class Solution { private: unordered_map<char,int> symbolValues={ {'I',1}, .原创 2022-02-23 20:47:45 · 189 阅读 · 0 评论 -
233. 数字 1 的个数:给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。
题目:给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。 1、暴力求解法: class Solution { public: int countDigitOne(int n) { int res=0; for(int i=1;i<=n;i++){ string str=to_string(i); res+=count(str.begin(),str.end(),'1');原创 2021-03-03 21:01:39 · 2651 阅读 · 1 评论 -
231. 2的幂:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
题目:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。 题解:按位与的作用及用法,参考链接:[按位与的作用](https://blog.csdn.net/yuzou____5000/article/details/113578133) 如果见过的就会 class Solution { public: bool isPowerOfTwo(int n) { if(n<=0) return false; if((n&n-1)==0原创 2021-03-03 18:39:50 · 219 阅读 · 1 评论 -
230. 二叉搜索树中第K小的元素:给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 题解:二叉搜索树,使用中序遍历,得到从小到大的数,每递归一次,count++;当count==k时,得到第k小的元素。 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *原创 2021-03-03 18:24:00 · 842 阅读 · 1 评论 -
229. 求众数 II给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题 题解:摩尔投票法选出出现频数最多的值。O(N)时间,O(1)空间。 摩尔投票法分为两个阶段:抵消阶段和计数阶段。 抵消阶段: 两个不同投票进行对坑,并且同时抵消掉各一张票,如果两个投票相同,则累加可抵消的次数; 计数阶段: 在抵消阶段最后得到的抵消计数只要不为 0,那这个候选人是有可能超过一半的票数的,为了验证,则需要遍历一次,统计票数,才可确定。 升级的摩尔投票在于最终的候选者(众数)有一个或者两个;因为题目要求了超过N/3,如原创 2021-03-03 16:58:31 · 645 阅读 · 0 评论 -
228. 汇总区间 :给定一个无重复元素的有序整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属
给定一个无重复元素的有序整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。 题解:依题意知,一个区间内的数是依次递增1;一次遍历,记录区间的左右端点。利用mov进行移动与判断 class Solution { public: vector<string> summaryRanges(vector<int>& nums)原创 2021-03-03 11:27:54 · 735 阅读 · 0 评论 -
227. 基本计算器 II:实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。 题解:在第一个数字字符前添加一个标记字符,默认为‘+’;将每一个符号和数字看成一个整体;+/-进容器,*/直接运算;最后遍历容器,将所有数字加起来。 class Solution { public: int calculate(string s) { char sign = '+'; int n原创 2021-03-03 10:31:43 · 1694 阅读 · 0 评论 -
206. 反转链表:反转一个单链表。
题解一:迭代法:在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点pre。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * .原创 2021-03-02 21:18:15 · 165 阅读 · 0 评论 -
142. 环形链表 II:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。 说明:不允许修改给定的链表。 进阶: 你是否可以使用 O(1) 空间解决此题? 题解方法一:使用hash表,遍历一次链表 /** * Definition for singly-linked list. * stru原创 2021-03-02 16:13:53 · 166 阅读 · 0 评论 -
141. 环形链表: 给定一个链表,判断链表中是否有环。
给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 如果链表中存在环,则返回 true 。 否则,返回 false 。 进阶: 你能用 O(1)(即,常量)内存解决此问题吗? 题解方法一: hash表遍历所有节点,每次遍历到一个节点时,原创 2021-03-02 15:33:27 · 129 阅读 · 0 评论 -
513. 找树左下角的值: 给定一个二叉树,在树的最后一行找到最左边的值。
给定一个二叉树,在树的最后一行找到最左边的值。 题解:使用层次遍历 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), l原创 2021-03-02 14:57:24 · 312 阅读 · 0 评论 -
NC22 合并两个有序的数组:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:69590 本题知识点: 数组 双指针
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:69590 本题知识点: 数组 双指针 算法知识视频讲解 题解:从后往前可以不用申请额外空间 class Solution { public: void merge(int A[], int m, int B[], int n) { int len=m+n; int tail1=m-1,tail2=n-1; int cur=len-1;原创 2021-03-02 11:13:41 · 333 阅读 · 0 评论 -
NC41 最长无重复子串:给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。
时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M 热度指数:49497 本题知识点: 哈希 双指针 字符串 算法知识视频讲解 题目描述 给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。 题解: set去重 双指针left、right标记中间段无重复字串的左右两端 遍历字符串,当右指针超过字符串标记位,停止遍历,每次查询一个字符后,进行判断,如果无重复,right++;若重复,消除arr【left】,left++; cla原创 2021-03-02 10:38:42 · 2138 阅读 · 0 评论 -
leedcode统计数字
## 统计数字 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值。 数学思想:将数字转化为字符串,并且将大于一位数的字符串拆分为单个数字的字符串,此时就可以统计K出现的次数了。 public int digitCounts(int k, int n) { // write your code here int count=0; for(int i=0;i<=n;i++) { Stri原创 2020-12-29 15:03:39 · 130 阅读 · 0 评论
分享