
LeetCode
Handsomk
为了理解递归,我们首先需要理解递归
展开
-
LeetCode--阶乘后的零
题目链接解析n!=n∗(n−1)∗(n−2)∗......1n! = n*(n-1)* (n-2)*......1n!=n∗(n−1)∗(n−2)∗......1一个数尾部有多少个0取决于它的因数包含多少个10比如100包含两个10,1000包含3个10,而10 = 2 * 5所以转化为求质因子(2,5)有多少对,5的个数是多于2的n/5n/5n/5表示[1,n][1,n][1,n]中包含一个因子5的数的个数,为什么?比如20=4∗520=4*520=4∗5,那么20前面肯定有3∗5,2∗原创 2022-03-25 10:59:53 · 428 阅读 · 0 评论 -
LeetCode--字典序的第K小数字
题目链接题解来源于大佬评论–>这位大佬class Solution {public: int getSons(long cur, int n) { int sum = 0; int width = 1; 当前层的宽度 while (1) { if (cur + width - 1 <= n) { //当前层最大值小于等于n sum += width; //总结点数可以加上当原创 2022-03-23 21:15:57 · 508 阅读 · 0 评论 -
LeetCode周赛--射箭比赛中的最大得分
题目链接这次周赛做的好差,写的太慢这个题回溯,在每个靶子面前有两种选择,得分或不得分class Solution {public: vector<int> ans; int max1 = 0; vector<int> maximumBobPoints(int numArrows, vector<int>& aliceArrows) { vector<int> tmp; dfs原创 2022-03-20 19:14:31 · 946 阅读 · 0 评论 -
LeetCode--矩阵中的路径
题目链接这道题细节很多,一不小心就超时①引用传递,避免整体赋值②短路或,当值为真时便不会往下进行```class Solution {public: bool vis[210][210]; bool exist(vector<vector<char>>& board, string word) { memset(vis, false, sizeof vis); int n = board.size(), m =原创 2022-03-20 19:07:33 · 552 阅读 · 0 评论 -
LeetCode--排序序列
题目链接直接用暴力回溯的话会超时所以直接计算每个位置上的数字class Solution {public: string getPermutation(int n, int k) { int num[n + 1], vis[n + 1]; num[n] = 1; for (int i = n; i >= 1; i--) { //首先计算阶乘 num[5] = 24表示位置5上的数不变的话,后面的数有24种排列原创 2022-03-19 12:46:23 · 522 阅读 · 0 评论 -
LeetCode--字符串的排列
思路来源:传送门题目给的字符串是有重复字符的一开始自己做的是最后用vector去重的sort(vec.begin(), vec.end());vec.erase(unique(vec.begin(), vec.end()), vec.end());但是感觉这样的话没什么难度然后看了别人的思路,学到了不少①首先通过在原有字符串上交换元素得到不同的排列,首先固定第一个位置,然后固定第二个位置,以此类推…②怎么做到的去重呢?比如字符串是这样baac,我们把第一个a放到索引0位置上,后面剩.原创 2022-03-16 18:22:46 · 907 阅读 · 0 评论 -
LeetCode--旋转数组的最小数字
思路来源:传送门关键点: 通过二分判断最小值出现的位置,然后不断缩小范围其中比较麻烦的一种情况就是numbers[mid] == numbers[r]此时可让r = r - 1(操作后仍可保证最小值在[l,r]内)证明:首先整体分为两部分,都是升序的根据 num[mid] >= num[l] >= num[r]和num[mid] == num[r]可得出num[l] == num[r]①若右半部分只有一个元素,则说明num[r]就是最小值,r-1后num[l]就是最小值,仍.原创 2022-03-16 16:45:47 · 183 阅读 · 0 评论 -
LeetCode--数组中重复的数字
原理:将索引和数组值关联起来,将数组元素放到自己的值对应的索引上,如果有重复的数字,则必会出现一个索引对应多个相同值的情况,即为答案。思路来源https://leetcode-cn.com/u/jyd/class Solution {public: int findRepeatNumber(vector<int>& nums) { int i = 0; while (i < nums.size()) { .原创 2022-03-15 17:41:01 · 238 阅读 · 0 评论 -
LeetCode-得到要求路径的最小带权子图
题目链接这次周赛最后一题没搞出来太久没写dijkstra,模板都忘了深夜补题,收获颇丰,学到了很多新的写法关键点:反向建图如果正常建图的话,求n - 1个点到目的点需要n - 1次djk,而反向建图的话只需要一次,即把目的点作为原点typedef long long ll;typedef pair<int, int> pii;typedef pair<long long, int> pli;class Solution {public: long原创 2022-03-14 00:14:16 · 497 阅读 · 0 评论 -
LeetCode-下一个排列
题目整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。例如,arr原创 2022-02-27 21:59:47 · 93 阅读 · 0 评论 -
LeetCode-完成旅途的最少时间
题目给你一个数组 time ,其中 time[i] 表示第 i 辆公交车完成 一趟旅途 所需要花费的时间。每辆公交车可以 连续 完成多趟旅途,也就是说,一辆公交车当前旅途完成后,可以 立马开始 下一趟 旅途。每辆公交车 独立 运行,也就是说可以同时有多辆公交车在运行且互不影响。给你一个整数 totalTrips ,表示所有公交车 总共 需要完成的旅途数目。请你返回完成 至少 totalTrips 趟旅途需要花费的 最少 时间ps想了半天没想出来二分,做题太少class Solution原创 2022-02-27 17:38:19 · 8932 阅读 · 1 评论 -
Java-快排-堆排-归并
Java实现快排、堆排、归并原创 2022-02-20 10:43:06 · 78 阅读 · 0 评论