![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
递归
酷酷的Herio
这个作者很懒,什么都没留下…
展开
-
LC.5600. 第 K 条最小指令 (组合数学&递归)
LC.5600. 第 K 条最小指令 (组合数学&递归)思路:考虑当前最高位选HHH还是VVV,假设当前有hhh个HHH,vvv个VVV,如果最高位选VVV,那么会有s=C(h+v−1,h−1)s=C(h+v-1,h-1)s=C(h+v−1,h−1)个排列比该排列小,所以需要判断s,ks,ks,k的关系,如果k>sk>sk>s,显然是选取VVV,然后递归查找第k−sk-sk−s个排列。否则选取HHH,然后递归查找第kkk个排列。class Solution {public:原创 2020-11-01 13:43:19 · 306 阅读 · 0 评论 -
牛牛的01游戏(递归&模拟)
牛牛的01游戏(递归&模拟)思路:递归或者模拟。模拟的时候注意到一旦ans.back()=c=1ans.back()=c=1ans.back()=c=1时,这时ccc不产生贡献了。模拟方法string solve(string s) { string ans; for(char c:s){ bool f=true; while(!ans.empty()&&ans.back()==c){原创 2020-08-14 09:56:12 · 344 阅读 · 0 评论 -
LC.112. 路径总和
LC.112. 路径总和传送门思路:dfsdfsdfs递归水题,直接dfsdfsdfs遍历到每个叶子结点时特判一下是否等于sumsumsum即可。时间复杂度:O(n+m)O(n+m)O(n+m)/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(原创 2020-07-07 11:02:07 · 296 阅读 · 0 评论 -
LC.108. 将有序数组转换为二叉搜索树
LC.108. 将有序数组转换为二叉搜索树传送门前置知识:1.二叉搜索树的中序遍历是升序的。2.给定中序遍历不能确定一棵二叉搜索树。3.高度平衡BSTBSTBST的含义:一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。4.给定限制要求高度平衡也不一定能确定一棵BSTBSTBST, 因为当数组长度为奇数时,根唯一,但子树的根不一定唯一,数组长度为偶数时根可以中间靠左的位置,也可以选择中间靠右的位置,也不唯一。思路:选取中间结点作为根开始递归即可。/**原创 2020-07-03 08:17:00 · 385 阅读 · 0 评论 -
汉诺塔专题讲解。
汉诺塔000题意:三根柱子,每次移动距离无限制,一次移动一个圆盘,问将所有圆盘从AAA按大小顺序移动到CCC最少需要多少步。思路:因为这里不需要小圆盘始终在大圆盘上面,所以设移动nnn个圆盘的方案为f(n)f(n)f(n),显然先将n−1n-1n−1个圆盘移动到BBB上需要n−1n-1n−1步。然后最后一个圆盘移动到CCC需要111步,然后再将n−1n-1n−1个圆盘移动到CCC需要n−1n-1n−1步。所以f(n)=2n−1f(n)=2n-1f(n)=2n−1.汉诺塔1题意:三根柱子,每次移原创 2020-06-04 09:16:17 · 399 阅读 · 0 评论 -
A - Spreadsheets(进制转换)
A - Spreadsheets(进制转换)题意 :将读入的数字转化为对应的”26进制“,字母转化为对应的数字。思路:用sscanfsscanfsscanf来判断属于哪一种情况,然后写一个递归进制转化,注意这里的26进制是从1到26,而不是从0到25.所以递归式要用(t−1)(t-1)(t−1)递归。然后字母转化为数字不断乘26+对应的数即可。AC代码:#include<cstdi...原创 2020-05-04 09:44:43 · 309 阅读 · 0 评论