用Rust写Leetcode——环境配置

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

内容简介:许久不写博客了,临近毕业,各种事情都告一段落。无意间看到安利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删掉,只引入想要运行的题目的单测就好了


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

查看所有标签

猜你喜欢:

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

组合数学教程

组合数学教程

范林特 / 刘振宏、赵振江 / 机械工业出版社 / 2007-4 / 49.00元

本书介绍组合数学中的基础理论和实际应用,讲述的内容非常广泛,讨论的问题涵盖组合数学所涉及的绝大部分领域。本书不仅包含了通常组合数学教科书中的经典内容,而且收集了若干新的内容,如Lovász筛法、范德瓦尔登积和式猜想、结合区组设计、码和设计等。 本书阐述深入浅出,简明易懂,适合作为高等院校高年级本科生与低年级研究生的组合数学课程教材,也适合作为数学和其他学科的研究人员的参考书。一起来看看 《组合数学教程》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具