Leetcode 的 Rust 解法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
netcan
0.23D
V2EX    程序员

Leetcode 的 Rust 解法

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

    目前正在学习 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 Phone
    @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     Solana     2585 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 05:12 PVG 13:12 LAX 21:12 JFK 00:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86