前言
许久不写博客了,临近毕业,各种事情都告一段落。无意间看到安利Rust的文章,心里就种草了,闲来无事,从网上找到《Rust programming book》的中文版,陆陆续续看到400页,觉得可以开始写代码了。
正好最近又想把Leetcode上的题刷完,而leetcode又已经支持Rust了,就开始决定用Rust刷Leetcode,刷题的同时,顺便就熟悉新语言了。
写博客的时候,突然发现Csdn乱七八糟的东西多了好多,于是就是转到掘金来了。
废话不多说,下面开始进入正题
环境配置
Rust安装
个人目前使用的是windows环境,这里主要介绍windows下环境的配置 首先,下一个rustup,运行rustup安装rust和其配套的包管理工具。具体细节不多说,网上有很多教程,其中关键点是,因为rustup默认的下载源在国外,所以下载速度会很慢,所以在下载之前,先加两个系统变量,配置一个中科大的源:
RUSTUP_DIST_SERVER:
https://mirrors.ustc.edu.cn/rust-static
RUSTUP_UPDATE_ROOT:
https://mirrors.ustc.edu.cn/rust-static/rustup
IDE配置
安装好之后,我们需要一个IDE,这里我选择 IDEA + Rust插件
装好之后,新建一个Rust bin项目
建好项目之后,接下来就可以开始写程序了
配置单元测试环境
Rust提供了非常方便的单元测试和集成测试功能,我们想要在写完每道题的算法之后,运行一套测试用例,看看程序是否写对了。
首先在src目录下有个main.rs
,我们在src目录下再新建一个rust文件,作为存放每道题的解法和单测的地方。像这样:
我这里新建了一个n754_reach_a_number.rs
的文件 (即编号为754,标题名为reach a number的题目),因为Leetcode的代码是以函数的方式提交的,里面的代码是这样:
use std::f64;
pub struct Solution{}
impl Solution{
pub fn reach_number(target:i32)->i32{
let target=target.abs();
let mut n=f64::sqrt(2.0*target as f64) as i32;
let mut sum=n*(n+1)/2;
while sum<target{
n+=1;
sum+=n;
}
while (sum-target)%2==1{
n+=1;
sum+=n;
}
n
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_1() {
assert_eq!(Solution::reach_number(1),1);
assert_eq!(Solution::reach_number(2),3);
assert_eq!(Solution::reach_number(3),2);
assert_eq!(Solution::reach_number(7),5);
assert_eq!(Solution::reach_number(8),4);
assert_eq!(Solution::reach_number(12),7);
}
#[test]
fn test_2(){
assert_eq!(Solution::reach_number(-1),1);
assert_eq!(Solution::reach_number(-2),3);
assert_eq!(Solution::reach_number(-3),2);
assert_eq!(Solution::reach_number(-7),5);
assert_eq!(Solution::reach_number(-8),4);
assert_eq!(Solution::reach_number(-12),7);
}
}
其中上面是题目的解法,下面是我们的单测
接下来在main.rs
引入我们的mod(Rust里一个文件即可以看作一个mod):
mod n754_reach_a_number;
fn main() {
}
看上去我们的main
函数什么也没做,事实上我们也不需要它做什么,我们只是要引入这个mod,然后运行mod里的单测,这可以通过Edit Configuration
实现:
像上图这样,新建一个test,把command
改为test
,这样在我们运行它的时候就会自动运行mod的单测了(因为#[cfg(test)]
只允许在test的时候运行,所以需要把命令改为test)
通过上述操作,接下来再写其他题的时候,我们只需要把根据对应的题目建一个对应的 rs 文件,再在main.rs
把不相关的mod删掉,只引入想要运行的题目的单测就好了