每天一道Rust-LeetCode(2019-06-06)
每天一道Rust-LeetCode(2019-06-02) Z 字形变换
坚持每天一道题,刷题学习Rust.
原题
题目描述
示例:
输入: 3
输出: 5
解释:
给定 n = 3, 一共有 5 种不同结构的二叉搜索树:
1 3 3 2 1
\ / / / \
3 2 1 1 3 2
/ / \
2 1 2 3
解题过程
思路:
搜索树的特点就是左小右大
因此:
这是一个纯计算的过程,都不用模拟二叉树
1...n
G[i]表示有i个节点的二叉树有多少种
G[N]=G[0]G[N-1]+G[1]G[N-2]+G[2]*[N-3]+....
考虑1做定点的情况主要考虑右边N-1个节点的各种组合怎么挂在1的右子树
考虑2做顶点的情况,左边是一个节点的子树,右边是n-2个节点的子树
两个总数相乘就是所有可能的组合.
struct Solution {}
impl Solution {
pub fn num_trees(n: i32) -> i32 {
if n <= 1 {
return n;
}
let mut v = vec![0; (n + 1) as usize];
v[0] = 1;
v[1] = 1;
return Solution::num_trees_internal(n as usize, &mut v);
}
pub fn num_trees_internal(n: usize, v: &mut Vec<i32>) -> i32 {
if v[n] > 0 {
return v[n];
}
let mut sum = 0;
for i in 0..n {
v[i] = Solution::num_trees_internal(i, v);
v[n - i - 1] = Solution::num_trees_internal(n - i - 1, v);
sum += v[i] * v[n - i - 1];
}
sum
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_num_trees() {
assert_eq!(1, Solution::num_trees(1));
assert_eq!(2, Solution::num_trees(2));
assert_eq!(5, Solution::num_trees(3));
}
}
一点感悟
动态规划是自底向上,针对这种情况非常简单,记录下来,避免反复计算.
其他
欢迎关注我的github,本项目文章所有代码都可以找到.
每天一道Rust-LeetCode(2019-06-06)的更多相关文章
- 2019.07.06 纪中_B
今天的题看起来都很简单,结果就爆炸了 做题时:怎么都是图论??? 结果最后好多是DP(最恐怖的是还有我没学过的状压DP) 2019.07.06[NOIP提高组]模拟 B 组 做了两题(稍微腐败了一下) ...
- SQL日期格式转换(经常用又经常忘记的东西)转载自http://www.cnblogs.com/wangyuelang0526/archive/2012/06/06/2538224.html
Select CONVERT(varchar(100), GETDATE(), 8):14:53:14Select CONVERT(varchar(100), GETDATE(), 9): 06 6 ...
- 2019/04/06 BJ省选模拟DAY1
今天好惨啊 \(n*m\)的图手抖打成\(n*n\)的板子 挂了70分 否则并列rk20?[雾] hyc好厉害啊阿克 省队预订了啊 T1 众所周知向量a,b相乘形成一个矩陣 已知一个矩阵 问至少要多少 ...
- 2019.02.06 bzoj4503: 两个串(fft)
传送门 题意简述:给两个字符串s,ts,ts,t,ttt中可能有通配符,问ttt在sss出现的次数和所有位置. 思路:一道很熟悉的题,跟bzoj4259bzoj4259bzoj4259差不多的. 然后 ...
- 2019.08.06模拟赛T2
题目大意: 已知三个$n$位二进制数$A$,$B$,$C$. 满足: $A+B=C$ 它们二进制位中$1$的个数分别为$a$,$b$,$c$. 求满足条件的最小的$C$. Solution 唉,又是一 ...
- 官网Windows 10安装程序驱动下载--截止:2019.01.06版本
说明:鉴于win7,8不可直接再下载原装iOS文件,这份共享程序包是为以后N年做的准备.如果N年后这个包还可以用,就可以省去很多麻烦. 百度网盘分享:https://pan.baidu.com/s/1 ...
- 【LeetCode】LCP 06. 拿硬币
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 替换 日期 题目地址:https://leetcode ...
- 2019.02.06 bzoj2187: fraction(类欧几里得)
传送门 题意简述:多组询问,每次给出a,b,c,da,b,c,da,b,c,d,求满足ab<pq<cd\frac ab<\frac pq<\frac cdba<qp& ...
- 2019.02.06 bzoj2987: Earthquake(类欧几里得)
传送门 题意简述:求满足ax+by+c≤0ax+by+c\le0ax+by+c≤0的二元组(x,y)(x,y)(x,y)对数. 思路: 类欧几里得算法模板题. 把式子变化一下变成:求满足0≤y≤−ax ...
- 2019.01.06 vijos lxhgww的奇思妙想(长链剖分)
传送门 长链剖分模板题. 题意简述:允许O(nlogn)O(nlog_n)O(nlogn)预处理,让你支持O(1)O(1)O(1)查找任意一个点的kkk级祖先. 思路:因为要O(1)O(1)O(1) ...
随机推荐
- Fink| CEP
什么是复杂事件CEP? 一个或多个由简单事件构成的事件流通过一定的规则匹配,然后输出用户想得到的数据,满足规则的复杂事件. 特征: 目标:从有序的简单事件流中发现一些高阶特征 输入:一个或多个由简单事 ...
- 【CF280D】k-Maximum Subsequence Sum(大码量多细节线段树)
点此看题面 大致题意: 给你一个序列,让你支持单点修改以及询问给定区间内选出至多\(k\)个不相交子区间和的最大值. 题意转换 这道题看似很不可做,实际上可以通过一个简单转换让其变可做. 考虑每次选出 ...
- linux的命令操作
linux的命令操作 1.日常操作命令 **查看当前所在的工作目录pwd **查看当前系统的时间 date **查看有谁在线(哪些人登陆到了服务器)who 查看当前在线last 查看最近的登陆历史记录 ...
- 解决Warning: Permanently added ' 192.168.1.230'(RSA) to the list of known hosts.
前提 当我在刚安装的Red Hat Linux5.x系统中进行ssh 192.168.1.230 远程时,出现以下错误: Warning: Permanently added ' 192.168.1. ...
- 优雅的解决springboot Aop @Cacheable this不生效
问题描述:在同一个类中springAop不生效,例如在同一个类中没有 @Cacheable的方法调用本类有 @Cacheable的方法,则缓存不会设置. 原因:springaop基于java prox ...
- A - QQpet exploratory park HDU - 1493 DP
A - QQpet exploratory park HDU - 1493 Today, more and more people begin to raise a QQpet. You can ...
- Reids Lua 模糊查询所有key 及 相对应的集合总数
Redis 使用 Lua 模糊查询所有key 及 相对应的集合总数 .Net 4.5.1 需要引入: StackExchange.Redis (测试用的 1.2.4.0) 方法一: 优点:原子 ...
- ubuntu18.04.2下编译openjdk9源码
最近在看<深入理解Java虚拟机 第二版>这本书,上面有关于自己编译OpenJDK源码的内容.自己根据书里的指示去操作,花了三天的时间,重装了好几次Ubuntu(还不知道快照这个功能,好傻 ...
- 使用 jQuery.TypeAhead 让文本框自动完成 (一)(最简单的用法)
项目地址:https://github.com/twitter/typeahead.js 直接贴代码了: @section headSection { <script type="te ...
- WPF ToggleButton Style
<Style x:Key="ArrowToggleStyle" TargetType="ToggleButton"> <Setter Prop ...