iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
Software Development

Rust的多方面運用系列 第 9

[Day9] Review and Supplement by use Leetcode problem

到今天也已經是第 9 天了,講了頗多東西但是可能沒有這麼完整或明確,所以這篇主要拿來複習之前的內容。
這樣應該會對剛學習這個語言的人比較有幫助。
或許有些人會略過這篇吧。
但是沒關係,會跟看過不是一個檔次的,需要學並且實際練題才能真正的知道如何使用,owob
標題英文不知道會不會比較多人看


首先是 1920. Build Array from Permutation

impl Solution {
    pub fn build_array(nums: Vec<i32>) -> Vec<i32> {
        let mut ans: Vec<i32> = Vec::new();
        for &i in nums.iter() {
            ans.push(nums[i as usize]);
        }
        ans
    }
}

這題應該相當簡單,就只是直接去以陣列中的數字去指向他的數字
但需要注意的是 i as usize 可能這邊我還沒有講解過。
i as usize 就是將 i 這個數字的型別直接轉成 usize
但是要注意的是如果說 i64 as i8 那就會把他直接截斷
也就是超過 i8 大小以後的都會不採用。
然後寫的時候由於是使用 nums 裡面的東西進行操作所以記得在 i 前面加一個 &


1929 Concatenation-Of-Array

impl Solution {
    pub fn get_concatenation(nums: Vec<i32>) -> Vec<i32> {
        let L = nums.len();
        let mut ans: Vec<i32> = Vec::new();
        for i in 0..L {
            ans.push(nums[i]);
        }
        for i in 0..L {
            ans.push(nums[i]);
        }
        ans
    }
}

這題的話我就直接使用 Vec 內建的 len 去做操作 len 顧名思義就是可以取得 Vec 裡面的值的個數。
並且,如果你不想再定義一個 ans 的 Vec 出來,這題也能直接用 nums 去做操作

impl Solution {
    pub fn get_concatenation(mut nums: Vec<i32>) -> Vec<i32> {
        let L = nums.len();
        for i in 0..L {
            nums.push(nums[i]);
        }
        nums
    }
}

就像這樣,需要注意的點只有 nums 傳入的時候要改成 mut 型式改為可變。


1672 Richest-Customer-Wealth/

impl Solution {
    pub fn maximum_wealth(accounts: Vec<Vec<i32>>) -> i32 {
        let mut ans = 0;
        for i in 0..accounts.len() {
            let mut now = 0;
            for j in &accounts[i] {
                now += j;
            }
            ans = std::cmp::max(now, ans);
        }
        ans
    }
}

這邊我們能夠看到的是,題目示範了 二維陣列的表示法。
後面的話就是直接巢狀迴圈,只不過當初在寫這題時就在思考, Rust 有沒有像 C++ 一樣的 max() 函數
找了找還真的有,
Docs
從這個就可以知道了
喔對,順便講一下, Rust 他幾乎每個套件都有所謂的 Docs 基本上在 Github 上都會寫這個的網址,就算沒有也能直接在 doc.rust-lang.org 上找到你想用的套件的說明
包括 STD 庫,所以這是一個非常好去學習的一個方式


impl ParkingSystem {

    fn new(big: i32, medium: i32, small: i32) -> Self {
        Self {
            inside: vec![big, medium, small],        
        }
    }
    
    fn add_car(&mut self, car_type: i32) -> bool {
        if self.inside[(car_type - 1) as usize] > 0 {
            self.inside[(car_type - 1) as usize] -= 1;
            return true;
        }
        return false;
    }
}

那這個就是今天的最後一題了,這個就跟我昨天所說的差不多, impl 的使用,那以上基本沒有要注意的部分了,
如果還是不太了解這題怎麼寫的可以回去看 impl 的說明或是直接在下面提問喔~

今天在學校真的有夠忙害我這篇這麼水


上一篇
[Day8] impl 以及 mod (將程式碼放在不同檔案使用)
下一篇
[Day10] 列舉體與錯誤處理
系列文
Rust的多方面運用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言