用Rust写Leetcode——环境配置

栏目: 编程语言 · Rust · 发布时间: 4年前

内容简介:许久不写博客了,临近毕业,各种事情都告一段落。无意间看到安利Rust的文章,心里就种草了,闲来无事,从网上找到《Rust programming book》的中文版,陆陆续续看到400页,觉得可以开始写代码了。正好最近又想把Leetcode上的题刷完,而leetcode又已经支持Rust了,就开始决定用Rust刷Leetcode,刷题的同时,顺便就熟悉新语言了。写博客的时候,突然发现Csdn乱七八糟的东西多了好多,于是就是转到掘金来了。

许久不写博客了,临近毕业,各种事情都告一段落。无意间看到安利Rust的文章,心里就种草了,闲来无事,从网上找到《Rust programming book》的中文版,陆陆续续看到400页,觉得可以开始写代码了。

正好最近又想把Leetcode上的题刷完,而leetcode又已经支持Rust了,就开始决定用Rust刷Leetcode,刷题的同时,顺便就熟悉新语言了。

写博客的时候,突然发现Csdn乱七八糟的东西多了好多,于是就是转到掘金来了。

废话不多说,下面开始进入正题

环境配置

Rust安装

个人目前使用的是windows环境,这里主要介绍windows下环境的配置 首先,下一个rustup,运行rustup安装rust和其配套的包管理工具。具体细节不多说,网上有很多教程,其中关键点是,因为rustup默认的下载源在国外,所以下载速度会很慢,所以在下载之前,先加两个系统变量,配置一个中科大的源:

用Rust写Leetcode——环境配置
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写Leetcode——环境配置

建好项目之后,接下来就可以开始写程序了

配置单元测试环境

Rust提供了非常方便的单元测试和集成测试功能,我们想要在写完每道题的算法之后,运行一套测试用例,看看程序是否写对了。

首先在src目录下有个 main.rs ,我们在src目录下再新建一个rust文件,作为存放每道题的解法和单测的地方。像这样:

用Rust写Leetcode——环境配置

我这里新建了一个 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 实现:

用Rust写Leetcode——环境配置

像上图这样,新建一个test,把 command 改为 test ,这样在我们运行它的时候就会自动运行mod的单测了(因为 #[cfg(test)] 只允许在test的时候运行,所以需要把命令改为test)

通过上述操作,接下来再写其他题的时候,我们只需要把根据对应的题目建一个对应的 rs 文件,再在 main.rs 把不相关的mod删掉,只引入想要运行的题目的单测就好了


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Tango with Django

Tango with Django

David Maxwell、Leif Azzopardi / Leanpub / 2016-11-12 / USD 19.00

Tango with Django is a beginner's guide to web development using the Python programming language and the popular Django web framework. The book is written in a clear and friendly style teaching you th......一起来看看 《Tango with Django》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具