V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
netcan
V2EX  ›  程序员

Leetcode 的 Rust 解法

  •  
  •   netcan ·
    netcan · 2019-03-10 18:06:59 +08:00 · 4738 次点击
    这是一个创建于 2086 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前正在学习 Rust,发现 Leetcode 上面很多题目都没人尝试用 Rust,这里记录一下使用 rust 刷 Leetcode 的感受,目前仓库位于:https://github.com/netcan/Leetcode-Rust

    仓库自带爬虫,可以抓取个人提交记录中的指定语言部分。

    20 条回复    2022-07-23 18:21:32 +08:00
    kiwi95
        1
    kiwi95  
       2019-03-10 19:22:38 +08:00 via Android
    我用 rust 写了一些题,比你这个多一些。链表的题不太好做,其它的用 rust 写非常舒服
    netcan
        2
    netcan  
    OP
       2019-03-10 20:17:44 +08:00
    @kiwi95 握爪,不过我做了一些二叉树相关的比较多
    luozic
        3
    luozic  
       2019-03-10 20:47:50 +08:00 via iPhone
    rust 写 B+/B-树怎么样?
    Kilerd
        4
    Kilerd  
       2019-03-10 21:29:05 +08:00
    leet code 的链表题传入的是 Option<Box<ListNode>> 写起来简直绝望。
    Kilerd
        5
    Kilerd  
       2019-03-10 21:32:10 +08:00   ❤️ 1
    BTW,虽然我的很多题没有更新上 GITHUB,但是你可以看看我的代码结构
    https://github.com/Kilerd/leetcode-rust

    https://github.com/Kilerd/leetcode-rust/blob/master/Cargo.toml#L7 用 dependence 或者 workgroup 来管理每一道题。

    https://github.com/Kilerd/leetcode-rust/blob/master/hamming-distance/src/main.rs#L20

    每一道题里面用 #[test] 来做本地的测试管理,这样就可以用 `cargo watch -x test` 来实时跑代码了。
    netcan
        6
    netcan  
    OP
       2019-03-10 21:53:31 +08:00
    @Kilerd 这种管理方式看上去不错,因为有时候在公司刷题传不了代码,在家的时候刷题,所以就想到了爬虫收集一波。。。
    kiwi95
        7
    kiwi95  
       2019-03-10 22:10:40 +08:00   ❤️ 1
    @Kilerd 我觉得你这个代码结构有点奇怪,我是每个题一个文件做一个 mod,整个是一个项目的

    https://github.com/wuxu92/leetcode.rs
    netcan
        8
    netcan  
    OP
       2019-03-10 22:26:41 +08:00
    @kiwi95 你这应该是做成一个 lib 了吧...
    kiwi95
        9
    kiwi95  
       2019-03-10 22:35:20 +08:00 via Android
    @netcan 是的,应该作为一个 lib,只运行 cargo test 的嘛。

    rust 推荐项目都做成 lib,bin 类型只写一个 main 来调用自己的 lib
    Kilerd
        10
    Kilerd  
       2019-03-10 23:05:18 +08:00 via iPhone
    @kiwi95 其实用 workgroup 来做会更好
    d18
        11
    d18  
       2019-03-10 23:32:45 +08:00
    小众语言没办法看速度打败了多少人
    Chingim
        12
    Chingim  
       2019-03-10 23:52:44 +08:00 via Android
    @Kilerd 请教一下你这结构怎么跑? cd 到对应的题目目录下,cargo test?
    trait
        13
    trait  
       2019-03-10 23:53:42 +08:00
    @kiwi95
    @netcan checkout the .take() method of Option, that's the key for solving such kind of problems in leetcode.
    (sorry for english, IME is broken on my Linux)
    Chingim
        14
    Chingim  
       2019-03-10 23:55:45 +08:00 via Android
    @trait macos smells good
    netcan
        15
    netcan  
    OP
       2019-03-11 08:31:56 +08:00 via Android
    @d18 哈哈,所以做完一题后,经常发现打败 100%的人,然后一看,这题多半是没人提交。。( leetcode-cn.com 的情况)
    netcan
        16
    netcan  
    OP
       2019-03-11 08:56:21 +08:00 via Android
    @trait .unwrap()也很好用
    netcan
        17
    netcan  
    OP
       2019-03-11 08:59:48 +08:00 via Android
    @Chingim cargo watch -x test
    trait
        18
    trait  
       2019-03-11 13:56:00 +08:00
    @netcan 不,在这个环境下 unwrap 几乎没用,take 的作用是在链表图这种复杂结构题中对抗 borrowck。unwrap 在 rust 工程开发中也不建议用,除非有十足的把握,更多的用于 test
    unforgiven
        19
    unforgiven  
       2019-08-08 16:22:05 +08:00
    @Kilerd 这么久的帖子我都进来了,感受下我的绝望 wtf!Option<Box<ListNode>>
    neteroster
        20
    neteroster  
       2022-07-23 18:21:32 +08:00 via Android
    @unforgiven 时隔两年,我也被 Option<Box<ListNode>> 恶心了一吧,一堆引用看得头大(
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2901 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:12 · PVG 20:12 · LAX 04:12 · JFK 07:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.