
LeetCode
刷题,学习。
瓶邪写一个夏天
这个作者很懒,什么都没留下…
展开
-
leetcode 166 分数到小数 C语言实现
题目leetcode 166给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。示例 1:输入: numerator = 1, denominator = 2输出: “0.5”示例 2:输入: numerator = 2, denominator = 1输出: “2”示例 ...原创 2020-03-21 17:13:06 · 389 阅读 · 0 评论 -
leetcode 155 最小栈 C语言实现
题目leetcode 155设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minSta...原创 2020-03-12 18:34:25 · 360 阅读 · 0 评论 -
leetcode 151 翻转字符串里的单词 C语言实现
题目leetcode 151给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输出: “world! hello”解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: “a good exa...原创 2020-03-08 17:22:19 · 417 阅读 · 0 评论 -
leetcode 150 逆波兰式 C语言实现
题目leetcode 150根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, , / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: [“2”, “1”, “+”, “3”, ""]输出: 9解释: ((2 + 1) * 3)...原创 2020-03-08 13:46:30 · 338 阅读 · 0 评论 -
leetcode 148 排序链表 C语言
题目leetcode 148在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5代码非递归,自底向上。struct Lis...原创 2020-03-08 12:59:21 · 259 阅读 · 0 评论 -
leetcode 139 单词拆分 C语言实现
题目leetcode 139给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “...原创 2020-03-06 13:30:13 · 1404 阅读 · 0 评论 -
leetcode 135 分发糖果 C语言
题目leetcode 135老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入: [1,0,2]输出: 5解释: 你可以分别给这三个孩子分发 2、1、...原创 2020-03-05 19:27:45 · 673 阅读 · 0 评论 -
leetcode 132 分割回文串 II C语言实现 动态规划
题目leetcode 132给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回符合要求的最少分割次数。示例:输入: “aab”输出: 1解释: 进行一次分割就可将 s 分割成 [“aa”,“b”] 这样两个回文子串。代码int minCut(char * s){ int const len = strlen(s); int check[len]...原创 2020-03-05 13:09:53 · 247 阅读 · 0 评论 -
131 分割回文串 C语言实现 dfs+动态规划
题目leetcode 131给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出:[[“aa”,“b”],[“a”,“a”,“b”]]代码void partition__(char *s, int start, int len, int **dp, char **str, int k, char ***...原创 2020-03-05 11:59:33 · 346 阅读 · 0 评论 -
leetcode 130 被围绕的区域 C语言实现
题目给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X代码深度优秀,把边界O所联通区域全部先标记为#,学习题解void dfs(char ...原创 2020-03-04 22:33:02 · 651 阅读 · 0 评论 -
leetcode 145 二叉树的后序遍历 C语言实现 非递归
题目代码int* postorderTraversal(struct TreeNode* root, int* returnSize){ *returnSize = 0; if (root == NULL) return 0; #define MAX 1000000 int *arr = (int *)malloc(sizeof(int) * MAX); ...原创 2020-03-01 13:05:02 · 267 阅读 · 0 评论 -
leetcode 144 二叉树的前序遍历,非递归,C语言实现
测评题目leetcode 144代码int* preorderTraversal(struct TreeNode* root, int* returnSize){ *returnSize = 0; if (root == NULL) return 0; #define MAX 1000000 int *arr = (int *)malloc(sizeof...原创 2020-03-01 12:38:39 · 182 阅读 · 0 评论 -
leetcode 125 验证回文串 C语言实现
测评题目leetcode 125给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false代码注意用位运算会快很多。小写字母c变大写字母:c &...原创 2020-03-01 11:57:19 · 450 阅读 · 0 评论 -
leetcode 97 交错字符串 C语言实现
题目leetcode 97给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。示例 1:输入: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbcbcac”输出: true示例 2:输入: s1 = “aabcc”, s2 = “dbbca”, s3 = “aadbbbaccc”输出: false代码动态规划,...原创 2020-02-29 22:38:22 · 362 阅读 · 0 评论 -
leetcode 87 扰乱字符串 C语言实现
测评题目leetcode 87代码此题题目很容易误导大家,题目画的图像是二分扰乱,实际是每个位置都可以交换,详见代码。bool isScramble__(char *s1, int l1, int r1, char *s2, int l2, int r2) { if (l1 > r1) return false; if (r1 - l1 != r2 - l...原创 2020-02-29 21:41:32 · 265 阅读 · 0 评论 -
leetcode 124 二叉树中的最大路径和 C语言
题目leetcode 124给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。代码int maxPathSum__(struct TreeNode *root, int *max) { if (root == NULL) return 0; int l = maxPathSu...原创 2020-02-29 17:11:51 · 983 阅读 · 0 评论 -
leetcode 123 买卖股票的最佳时机 III C语言实现
题目leetcode 123给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [3,3,5,0,0,3,1,4]输出: 6解释: 在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时...原创 2020-02-29 16:15:13 · 240 阅读 · 0 评论 -
leetcode 122 买卖股票的最佳时机 II C语言实现
题目leetcode 122给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = ...原创 2020-02-29 11:22:45 · 172 阅读 · 0 评论 -
leetcode 121 买卖股票的最佳时机 C语言实现
题目leetcode 121给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6...原创 2020-02-29 11:09:09 · 299 阅读 · 0 评论 -
leetcode 118 杨辉三角 C语言
题目leetcode 118代码int** generate(int numRows, int* returnSize, int** returnColumnSizes){ *returnSize = 0; int **res = (int **)malloc(sizeof(int *) * numRows); (*returnColumnSizes) = (in...原创 2020-02-28 20:43:56 · 376 阅读 · 0 评论 -
leetcode 114 二叉树展开为链表 C语言
题目leetcode 114给定一个二叉树,原地将它展开为链表。例如,给定二叉树代码struct TreeNode *getright(struct TreeNode *root) { if (root == NULL) return NULL; while (root->right != NULL) root = root->right; retu...原创 2020-02-28 20:16:17 · 194 阅读 · 0 评论 -
leetcode 113 路径总和 II
题目leetcode 113给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22,代码void dfs(struct TreeNode *root, int arr[], int ind, int **res, int *returnSize, int **ret...原创 2020-02-28 10:01:13 · 137 阅读 · 0 评论 -
leetcode 76 最小覆盖子串 C语言实现
题目给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。代码char * minWindow(char * s, char * t){ ...原创 2020-02-27 12:31:20 · 1814 阅读 · 3 评论 -
leetcode 112 总路径和 C语言实现
题目leetcode 112给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22,代码void hasPathSum__(struct TreeNode *root, int sum, int *flag) { if (root ==...原创 2020-02-26 21:12:55 · 129 阅读 · 0 评论 -
leetcode 111 二叉树的最小深度 C语言实现
题目leetcode 111给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],代码int minDepth(struct TreeNode* root){ if (root == NULL) return 0; int l ...原创 2020-02-26 21:11:10 · 182 阅读 · 0 评论 -
leetcode 110 平衡二叉树 C语言实现
题目leetcode 110给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]代码int isBalanced__(struct TreeNode *root, int *flag) { if (root == NU...原创 2020-02-26 20:27:27 · 213 阅读 · 0 评论 -
leetcode 108 将有序数组转换为二叉搜索树 C语言实现
题目leetcode 108将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:代码struct TreeNode *sortedAr...原创 2020-02-26 18:59:41 · 534 阅读 · 0 评论 -
leetcode 106 从中序与后续遍历序列构造二叉树 C语言实现
题目leetcode 106根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树:代码后续遍历最后一个节点是根节点,中序遍历按根节点分为左右部分//后续遍历最后一个节点是根节点,中序遍历按根节点分为左右部分...原创 2020-02-26 18:17:27 · 370 阅读 · 0 评论 -
leetcode 105 从前序与中序遍历序列构造二叉树 C语言实现
题目leetcode 105根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:代码前序遍历的第一个节点作为根节点,把中序遍历分为根节点的左边节点和右边节点,递归实现int local(int *nums, ...原创 2020-02-26 17:25:50 · 411 阅读 · 0 评论 -
leetcode 103 二叉树的锯齿形层次遍历 C语言实现
题目leetcode 103给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回锯齿形层次遍历如下:[[3],[20,9],[15,7]]代码int** zigzagLevelOrder(str...原创 2020-02-25 22:12:17 · 446 阅读 · 0 评论 -
leetcode 99 回复二叉搜索树 C语言实现
测评题目leetcode 99二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。示例 1:输入: [1,3,null,null,2]1/32输出: [3,1,null,null,2]3/12示例 2:输入: [3,1,4,null,null,2]3/ 1 4/2输出: [2,1,4,null,null,3]2/ ...原创 2020-02-25 20:46:27 · 368 阅读 · 0 评论 -
leetcode 98 验证二叉搜索树 C语言实现
题目leetcode 98给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5,...原创 2020-02-25 19:09:00 · 406 阅读 · 0 评论 -
leetcode 93 复原IP地址 C语言实现
测评题目leetcode 93给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。示例:输入: “25525511135”输出: [“255.255.11.135”, “255.255.111.35”]代码i:代表第一个点可到达的最后一个位置j:代表第二个点可到达的最后一个位置k:代表第三个点可到达的最后一个位置int getnum(char *s, int...原创 2020-02-25 15:51:36 · 647 阅读 · 0 评论 -
leetcode 91 解码方法 C语言实现
题目leetcode 91一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入: “226”输出: 3解释: 它可以解码为 “BZ” ...原创 2020-02-23 22:43:16 · 336 阅读 · 0 评论 -
leetcode 90 子集 II C语言实现
题目leetcode 90给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: [1,2,2]输出:[[2],[1],[1,2,2],[2,2],[1,2],[]]代码排序+回溯+去重 代码简洁int cmp (const void *a, const void *b) { return...原创 2020-02-23 21:39:01 · 302 阅读 · 0 评论 -
85 最大矩形 C语言实现
题目leetcode 85给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]输出: 6代码理解栈,每次出栈的高度大于等于当前高度int maxi...原创 2020-02-19 17:40:36 · 598 阅读 · 0 评论 -
leetcode 81 搜索旋转排序数组 C语言实现
题目leetcode 81假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例 1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例 2:输入...原创 2020-02-19 15:43:15 · 155 阅读 · 0 评论 -
leetcode 79 单词搜索 C语言实现
题目leetcode 79给定一个二维网格和一个单词,找出该单词是否存在于网格中。注意相邻的理解单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 w...原创 2020-02-19 15:12:12 · 497 阅读 · 0 评论 -
leetcode 78 子集 C语言实现
题目leetcode 78给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]代码回溯法//nums[c],arr_t[ind],n是代表当前要形成的数组长度(1-numsSi...原创 2020-02-19 12:46:51 · 340 阅读 · 0 评论 -
leetcode 72 编辑距离 C语言实现
题目leetcode 72给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入: word1 = “horse”, word2 = “ros”输出: 3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -...原创 2020-02-17 18:01:53 · 164 阅读 · 0 评论