
LeetCode
LeetCode解题报告
会做饭的好同学
遇多少风浪,心不再摇晃
展开
-
LeetCode 49. 字母异位词分组
leetcode49题解原创 2023-05-07 20:23:10 · 194 阅读 · 1 评论 -
LeetCode 199. 二叉树的右视图
Description:题目大意:给定一个二叉树,输出其右视图。解题思路:方法一:算法标签:DFS利用 DFS 先访问右节点,再访问左节点。如果第一次访问对应深度的节点,说明这个节点是最右节点代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : va原创 2022-04-22 09:12:50 · 340 阅读 · 0 评论 -
LeetCode 200. 岛屿数量
Description:题目大意:给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。解题思路:算法标签:dfs利用dfs求连通块。代码:class Solution {public: int xx[4] = {-1,1,0,0}; int yy[4] = {0,0,-1,1}; void dfs(vector<vector<char>>& grid , int x,int y , int m,int n原创 2022-04-20 09:32:35 · 369 阅读 · 0 评论 -
LeetCode 128. 最长连续序列
Description:题目大意:Input解题思路:算法标签:哈希表利用 unordereds_set 将所有元素加入,去重,不需要排序对每个元素依次遍历,前面的元素不存在再访问,因为那样才不连续代码:class Solution {public: int longestConsecutive(vector<int>& nums) { // 速度更快 unordered_set<int>number;原创 2022-04-18 16:48:33 · 748 阅读 · 0 评论 -
LeetCode 1143. 最长公共子序列
Description:题目大意:求两个字符串的最长公共子序列解题思路:算法标签:动态规划dp[i][j]dp[i][j]dp[i][j] 表示 text1[0:i−1]text1[0:i - 1]text1[0:i−1] 和 text1[0:j−1]text1[0:j - 1]text1[0:j−1] 的最长公共子序列如果 text1[i]==text2[j]text1[i] == text2[j]text1[i]==text2[j],则dp[i][j]=dp[i−1][j−1]+1dp[原创 2022-04-16 16:52:41 · 852 阅读 · 0 评论 -
LeetCode 14. 最长公共前缀
Description:题目大意:给定一个字符串数组,求它们的最长公共前缀。解题思路:算法标签:字符串,子串初始化最长公共前缀为第一个字符串依次比对即可代码:class Solution {public: string longestCommonPrefix(vector<string>& strs) { string ans; if(strs.size() == 0) return ans;原创 2022-04-16 16:26:16 · 299 阅读 · 0 评论 -
LeetCode 23. 合并K个升序链表
Description:题目大意:合并 K 个已经排序的链表解题思路:算法标签:分治将 k 个链表分成两两一组然后两个链表合并最终递归合并成为一个链表代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Sol原创 2022-04-04 10:27:39 · 244 阅读 · 0 评论 -
LeetCode 19. 删除链表的倒数第 N 个结点
Description:题目大意:删除单项列表倒数第n个元素解题思路:算法标签:双指针法设置虚拟节点,指向 head设置双指针 pre 和 last,使其相隔 n 个元素双指针同时移动,直到 last 为 NULL,此时 pre 指向删除节点的前一个元素,进行删除代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * Li原创 2022-04-03 10:55:23 · 352 阅读 · 0 评论 -
LeetCode 17.电话号码的字母组合
Description:题目大意:手机 9 键情况下,给定一串数字,能打印出多少种字母组合解题思路:算法标签:DFS代码:class Solution {public: vector<string>ans; void DFS(string digits,int index) { if(index == digits.length()) { ans.push_back(digits); return;原创 2022-04-02 10:47:32 · 439 阅读 · 0 评论 -
LeetCode 15.三数之和
Description:题目大意:寻找三个不重复的数字,使其和为 0 解题思路:算法标签:排序,双指针先进行排序,从小到大设置双指针 left 和 right以 nums[i] 为固定值,如果三个数之和大于0,右指针左移;如果三个数之和小于0,左指针右移注意去重代码:class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) {原创 2022-04-02 10:07:21 · 513 阅读 · 0 评论 -
LeetCode 21.合并两个有序链表
Description:题目大意:合并两个有序链表解题思路:算法标签:递归代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNod原创 2022-03-24 16:52:51 · 1312 阅读 · 0 评论 -
剑指 Offer 24.反转列表
Description:题目大意:反转单链表解题思路:算法标签:链表利用 cur 存储当前链表节点,pre 存储 前面的节点。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:原创 2022-03-23 19:36:16 · 661 阅读 · 0 评论 -
LeetCode3 无重复字符的最长子串(字符串set)
Description:题目大意:找到最长的不重复子串解题思路:算法标签:字符串,unordered_set利用unordered_set判断子串,从左往右依次判断代码:class Solution {public: int lengthOfLongestSubstring(string s) { unordered_set<char>word; int len = s.length(); int right = -1,an原创 2022-03-20 09:47:51 · 372 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围
Description:题目大意:从(0,0)出发,满足题目要求,最多能到达多少个点解题思路:算法标签:BFS代码:class Solution { struct Node { int x; int y; }; queue<Node>q; bool visited[200][200];public: bool isok(int i,int j,int k) { int tot = 0;原创 2022-03-05 09:51:40 · 155 阅读 · 0 评论 -
LeetCode79 单词搜索(DFS)
Description:题目大意:给出一个二维字符网络和一个单词,判断单词是否存在二维字符网络中解题思路:算法标签:DFS代码:class Solution {private: int rows,cols; bool dfs(vector<vector<char>>& board,string word,int i,int j,int k) { // 剪枝 if(i >= rows || i < 0 ||原创 2022-03-03 10:38:59 · 310 阅读 · 0 评论 -
LeetCode105 重建二叉树
Description:题目大意:已知先序遍历和中序遍历,构造二叉树解题思路:算法标签:二叉树代码:class Solution {private: map<int,int>index;public: TreeNode* myBuiltTree(const vector<int>& preorder,const vector<int>& inorder,int preorder_left,int preorder_right,原创 2022-03-03 09:49:03 · 259 阅读 · 0 评论 -
LeetCode 70 Climbing Stairs(dp)
Description:题目大意:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?解题思路:算法标签:dp,math因为可以走一步或者两步,所以到达第 i 层是到达第 i-1 层和第 i-2 层的方法数之和。斐波那契数列,还有多种方法可以解,貌似 dp 是最简单的方法。代码:const int N = 10005;class Solution {public: int climbStairs(int n) {原创 2020-12-11 16:02:56 · 128 阅读 · 1 评论