大家好,我是程序員小吳盼玄。12月初我在GitHub上上傳了一個(gè)倉(cāng)庫(kù)贴彼,到現(xiàn)在為止獲取了 6300 star,下面和大家聊聊關(guān)于項(xiàng)目啟動(dòng)的初衷埃儿、面臨的一些困難和未來(lái)的計(jì)劃器仗。
「LeetcodeAnimation」的萌芽?
在刷Leetcode的過(guò)程中童番,遇到很多有意思和有難度的題目精钮,有時(shí)候自己能做出來(lái),有時(shí)候需要看別人的分析才能解開(kāi)剃斧,但往往隔一段時(shí)間再去看原題的時(shí)候又是一頭霧水轨香。
這時(shí),我在考慮:有沒(méi)有一種方法可以把抽象的算法具體化幼东、生動(dòng)化臂容,加深或者加快解題的思路?
「LeetcodeAnimation」的夭折筋粗?
想起去年曾用自己熟悉的編程語(yǔ)言開(kāi)源過(guò)一個(gè)關(guān)于排序動(dòng)畫(huà)的項(xiàng)目(最近發(fā)現(xiàn)被人偷源碼上架App Store),在GitHub上也獲得了不少star策橘,效果不錯(cuò):因?yàn)槊看蜗肫饎?dòng)畫(huà)場(chǎng)景的時(shí)候就能知道排序的思路,進(jìn)而白板編程寫(xiě)成相應(yīng)的排序算法代碼娜亿,因?yàn)檫@個(gè)能力丽已,在不少的面試的算法環(huán)節(jié)能輕松應(yīng)對(duì)。
[圖片上傳失敗...(image-894208-1546049617738)]
項(xiàng)目GitHub地址:https://github.com/MisterBooo/Play-With-Sort-OC
于是买决,嘗試著將解題的思路用動(dòng)畫(huà)的形式記錄下來(lái)沛婴。
一開(kāi)始嘗試像之前一樣用OC語(yǔ)言編寫(xiě)動(dòng)畫(huà)吼畏,但發(fā)現(xiàn)這樣效率太低了,一個(gè)簡(jiǎn)單的題目動(dòng)畫(huà)編寫(xiě)需要耗費(fèi)幾個(gè)星期的時(shí)間嘁灯。
期間也學(xué)習(xí)過(guò)小程序泻蚊,打算使用小程序來(lái)顯示,可能功夫不到家丑婿,技巧不太熟練性雄,效果也不理想。
百般嘗試之后無(wú)果羹奉,于是這個(gè)想法停止了很長(zhǎng)一段時(shí)間秒旋,期間自己依舊笨拙的刷著 LeetCode 。
「LeetcodeAnimation」的開(kāi)始诀拭?【PPT做動(dòng)畫(huà)】
直到一個(gè)偶然的機(jī)會(huì)迁筛,自己在使用PPT的時(shí)候發(fā)現(xiàn)PPT的動(dòng)畫(huà)很豐富,使用技巧也不是很高深:只要你的想象力夠豐富耕挨,只需要幾分鐘便能勾勒出思路動(dòng)畫(huà)细卧。
于是,經(jīng)過(guò)一小段時(shí)間的學(xué)習(xí)筒占,加上自己的想象力贪庙,馬上做出了第一個(gè)動(dòng)畫(huà)。
可以明顯的發(fā)現(xiàn)赋铝,這個(gè)動(dòng)畫(huà)的交互與形狀的設(shè)置并不是很好插勤,不過(guò),我認(rèn)識(shí)到了:用PPT動(dòng)畫(huà)來(lái)演示LeetCode解題思路的確行得通革骨!
當(dāng)然,做PPT是個(gè)細(xì)致的活析恋,于是花了一些時(shí)間摸索PPT功能良哲,琢磨怎么把動(dòng)畫(huà)做的更好看、思路展現(xiàn)的更加流暢助隧。
「LeetcodeAnimation」的動(dòng)畫(huà)是如何構(gòu)思的筑凫?【一個(gè)題目變成動(dòng)畫(huà)】
基本上一道LeetCode上的原題從選題到文章生成的步驟是這樣的:
從基本熟悉知識(shí)點(diǎn)(圖、樹(shù)并村、堆巍实、棧、鏈表哩牍、哈希表棚潦、記憶搜索、動(dòng)態(tài)規(guī)劃膝昆、指針?lè)ㄍ璞摺⒉⒉榧龋┲忻總€(gè)知識(shí)點(diǎn)挑選出幾道經(jīng)典的題目叠必;
先自己審題、做題妹窖,然后查看網(wǎng)上有沒(méi)有思路更加清晰的解題方式纬朝;
加上想象力。
比如該題用到了鏈表的概念骄呼,那肯定動(dòng)畫(huà)就要有鏈表的形象共苛;
比如該題用到了滑動(dòng)窗口的概念,那就需要用長(zhǎng)方形來(lái)表示窗口蜓萄。
比如該題用到了二叉樹(shù)的概念俄讹,那么就需要構(gòu)造二叉樹(shù)的圖形。
其他的一些細(xì)節(jié)調(diào)整比如動(dòng)畫(huà)時(shí)間的設(shè)置绕德、動(dòng)畫(huà)出現(xiàn)與消失的方式患膛,這些就需要自己耐心細(xì)致的一幀一幀的調(diào)了。
「LeetcodeAnimation」的快樂(lè)與痛苦耻蛇?【算法動(dòng)圖形成】
很多時(shí)候踪蹬,一道題目的解題只花費(fèi)了幾分鐘,但做出動(dòng)畫(huà)來(lái)卻要?jiǎng)澐忠坏絻蓚€(gè)小時(shí)不等臣咖。
自己是一個(gè)在職程序員跃捣,工作也比較飽和,動(dòng)畫(huà)的制作只能安排在夜深人靜的時(shí)候夺蛇,在十一月份的時(shí)候經(jīng)常忙活著做動(dòng)畫(huà)做到凌晨一兩點(diǎn)疚漆。
這個(gè)過(guò)程痛快卻快樂(lè)著,畢竟刁赦,這是做自己喜歡做的事情:)
「LeetcodeAnimation」的成果
12月初娶聘,將項(xiàng)目放到了GitHub上面去,短短兩天登上了trending版第一的位置甚脉。
到目前位置丸升,已經(jīng)有超過(guò) 6300 的star。
「LeetcodeAnimation」的長(zhǎng)期計(jì)劃牺氨?
正如我在 「LeetcodeAnimation」上寫(xiě)的:我會(huì)盡力將LeetCode上所有的題目都用動(dòng)畫(huà)的形式演示出來(lái)狡耻,計(jì)劃用3到4年時(shí)間去完成它,期待與你見(jiàn)證這一天猴凹!
所以夷狰,基本上我一到兩天都會(huì)制作一道題目的動(dòng)畫(huà),狀態(tài)好的周末郊霎,一天能做三四題:)
期間得到了很多讀者的認(rèn)可沼头,覺(jué)得這種動(dòng)畫(huà)的形式大大方便了對(duì)于Leetcode的理解。
與此同時(shí)歹篓,有很多小萌新們覺(jué)得能不能從簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)開(kāi)始瘫证,同樣用動(dòng)畫(huà)的形式去解析一下揉阎。
經(jīng)過(guò)慎重考慮,期間與「掘金」背捌、「小專(zhuān)欄」等大佬們討論之后毙籽,覺(jué)得「用動(dòng)畫(huà)呈現(xiàn)數(shù)據(jù)結(jié)構(gòu)與算法」這個(gè)想法很棒!
于是毡庆,最近開(kāi)始停止更新「LeetcodeAnimation」坑赡,轉(zhuǎn)為從簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)開(kāi)始進(jìn)行動(dòng)畫(huà)制作。
但不用擔(dān)心「LeetcodeAnimation」會(huì)不會(huì)因此「太監(jiān)」么抗,更新完數(shù)據(jù)結(jié)構(gòu)與算法章節(jié)后毅否,立馬恢復(fù)更新「LeetcodeAnimation」,保守估計(jì) 2019 年會(huì)至少更新 130 道題目蝇刀,敬請(qǐng)期待:)
程序員小吳的 2019 螟加?
通過(guò)「LeetcodeAnimation」這個(gè)項(xiàng)目,認(rèn)識(shí)了很多的算法大佬吞琐,有慕課網(wǎng)最受歡迎的 波波老師(liuyubobobo)捆探,有大二就開(kāi)始研究深度學(xué)習(xí)的學(xué)霸等。在與他們溝通交流的過(guò)程中站粟,越來(lái)越體會(huì)到數(shù)據(jù)結(jié)構(gòu)與算法的魅力黍图,也越來(lái)越用動(dòng)力將自己的公眾號(hào)更新下去:)
明年的事情挺充實(shí)的:
- 動(dòng)畫(huà)演示完「數(shù)據(jù)結(jié)構(gòu)與算法」內(nèi)容
- 將如何制作動(dòng)畫(huà)的過(guò)程錄制下來(lái),讓更多人參與進(jìn)來(lái)
- 小專(zhuān)欄出一本小書(shū)
- 掘金出一本小冊(cè)
- 「LeetcodeAnimation」至少更新 130 篇奴烙,爭(zhēng)取突破 20,000 star
2018助被,say hi say goodbye!
2019切诀,與君共勉:)