用Rust寫Leetcode——環境配置

明年今日同志發表於2019-03-31

前言

許久不寫部落格了,臨近畢業,各種事情都告一段落。無意間看到安利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專案

建好專案之後,接下來就可以開始寫程式了

配置單元測試環境

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刪掉,只引入想要執行的題目的單測就好了

相關文章