當刷題遇見吐槽和涼席椅墊,完美!
鼓不敲不響
燈不撥不亮事不鑒不清碼不辯不明 n相信絕大多數的碼農都會有一個共同的煩惱:自己的代碼寫的到底好不好?
n
為什麼會有這個煩惱呢?
首先,好或者不好沒有一個量化的標準其次,找不到人來評價自己的代碼 n這會是嚴重阻礙程序員成長的一個攔路虎!
n不知道什麼是好什麼是不好,自然就寫不出更好的代碼。
n寫不出更好的代碼也就意味著水平停滯不前
n水平停滯不前也就意味著工資停滯不前、職位停滯不前
n長此以往,頭髮少了,激情沒了,白富美還沒找到人就40了。。。
n作為深受大家愛戴的馬哥,當然有責任帶領各位碼農朋友脫離苦海、逆天改命。於是在靈光乍現、識海爆燃、幽府大開的那麼一瞬間(原諒我擇天記看多了),讓我給想到了
n何不來一場代碼界的吐糟大會?!
n
水平低的負責寫出槽點滿滿的shit代碼,水平高的就在底下一邊嗑瓜子一邊吐糟、裝裝大牛、受受追捧,真真是兩全其美啊!
n如果再能限制一下吐糟的範圍,一個話題吐個好幾場,做到主題吐糟,那才叫一個完美。
n說干就干,不然就變成蝦扯蛋了。以下是活動細則:
n- 每期我會發放一個任務,大家編碼實現並提交到github倉庫(發布任務時指定)
- 隨機選出幾份代碼發布到公眾號文章,入選即送小禮品一份
- 大家在底部留言就可以吐糟了,也可以吐糟別人的吐糟,也可以提出自己的疑問
- 吐糟點贊最多的一位贈送小禮品一份
n
n
n
n
PS: 遇到有爭議的問題會在學習群里討論,後續文章公布討論結果。歡迎加入討論,公眾號菜單獲取入群方式
n代碼吐糟大會第一期
n
本期任務
n
leetcode 20
nhttps://leetcode.com/problems/valid-parentheses/#/description
n活動時間:2017.05.29-2017.06.04
n爭取每天選取一篇供大家吐槽,請大家不要害羞,積极參与,放心吐糟
n這麼多人一起幫你review代碼的機會是很難得的哦~
n代碼提交位置
n
githubwoniu/learnprogram
n
點擊公眾號底部」閱讀原文」可直接跳轉
n本期獎品
n
夏季涼席椅墊
n吐糟第一彈
n
以下是很久之前一位小夥伴的提交,咱們先拿來吐著。
n也恭喜這位小夥伴「被」入圍,獎品馬上奉上
n筆記名:note_Josan020, 請後台回復收貨地址
n代碼位置
n
githubwoniu/learnprogram
n具體內容
n
鏈接
nValid Parentheses | LeetCode OJn解題思路
n典型的stack的符號配對問題。
n注意一些特殊的測試用例就好
()( ) ()() [
n代碼
nclass Solution { npublic: n bool isValid(string s) { n if(s.size( ) == 0) n { n return false; n } n stack<char> st; n int i = 0; n //加入@主要是為了當stack為空時,以防出現取st.top()的報錯 n //相應測試用例,eg: ) n st.push(@); n while(!st.empty( )&&i!=s.size()){ n switch(s[i]){ n case (: n case [: n case {: n st.push(s[i++]); n break; n case ): n if(st.top( ) != (){ n return false; n } n else{ n st.pop( ); n ++i; n } n break; n case ]: n if(st.top( ) != [){ n return false; n } n else{ n st.pop( ); n ++i; n } n break; n case }: n if(st.top( ) != {){ n return false; n } n else{ n st.pop( ); n ++i; n } n break; n //出現其他無效字元 n default: return false; n } n } n return (st.size( ) == 1) ? true : false; n } n};n
n
上面的程序比較繁瑣,而且對case ]})的案例無法進行統一
n可以參考這個改進版
nclass Solution { npublic: n bool isValid(string s){ n //suppose null string is illegal n if(s.size( ) == 0){ n return false; n } n stack<char> st;n map<char, char> cm{ {),( },{],[ },{},{ } }; n for(int i = 0; i != s.size( ); ++i){ n switch(s[i]){ n case (: n case [: n case {: n st.push(s[i]); n break; n case ): n case ]: n case }: n if(st.empty( ) || st.top( ) != cm[s[i]]){ n return false; n } n else{ n st.pop( ); n break; n } n //if illegal character appears, like @ # $ % a ... , return false n default: n return false; n } n } n return st.empty( ); n } n};n
n
說明
n
6月1號20點,留言點贊最高的一位將會獲得咱們第一期的吐糟王
為方便統計,請大家到微信公眾號參與吐糟活動!
公眾號:馬志峰的編程筆記
推薦閱讀:
※15個C++項目列表
※說說 C++ 的 Concept
※[譯] C++中帶狀態元編程黑科技(二):實現常量表達式計數器
※C++模板元編程--replace_type<>
※C++模板元編程---編譯期類成員檢測
TAG:C |
