用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删掉,只引入想要运行的题目的单测就好了


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

查看所有标签

猜你喜欢:

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

Web性能权威指南

Web性能权威指南

Ilya Grigorik / 李松峰 / 人民邮电出版社 / 2013-9 / 69

本书是谷歌公司高性能团队核心成员的权威之作,堪称实战经验与规范解读完美结合的产物。本书目标是涵盖Web 开发者技术体系中应该掌握的所有网络及性能优化知识。全书以性能优化为主线,从TCP、UDP 和TLS 协议讲起,解释了如何针对这几种协议和基础设施来优化应用。然后深入探讨了无线和移动网络的工作机制。最后,揭示了HTTP 协议的底层细节,同时详细介绍了HTTP 2.0、 XHR、SSE、WebSoc......一起来看看 《Web性能权威指南》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

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

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具