用Rust写Leetcode——环境配置

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

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


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

查看所有标签

猜你喜欢:

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

Convergence Culture

Convergence Culture

Henry Jenkins / NYU Press / 2006-08-01 / USD 30.00

"Convergence Culture" maps a new territory: where old and new media intersect, where grassroots and corporate media collide, where the power of the media producer, and the power of the consumer intera......一起来看看 《Convergence Culture》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

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

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具