當前位置:
首頁 > 最新 > 「365演算法每日學計劃」:01打卡

「365演算法每日學計劃」:01打卡

自從開始做公眾號開始,就一直在思考,怎麼把演算法的訓練做好,因為思海同學在演算法這方面的掌握確實還不夠。因此,我現在想做一個「365演算法每日學計劃」。

「計劃」的主要目的:

1、想通過這樣的方式監督自己更努力的學習演算法。

2、想和小夥伴們「組團」一起來學習交流學習演算法過程中的點點滴滴。

「計劃」的主要內容:

1、數據結構和演算法的基礎知識鞏固。

2、逐步進階的oj演算法訓練。

「計劃」的時間安排:每周三和周六

——說在前面

365演算法每日學計劃

發表於2018-06-03思海同學

「演算法每日學」計劃01打卡:

問題描述

對於長度為5位的一個01串,每一位都可能是0或1,一共有32種可能。它們的前幾個是:

00000

00001

00010

00011

00100

請按從小到大的順序輸出這32種01串。

輸入格式

本試題沒有輸入。

輸出格式

輸出32行,按從小到大的順序每行一個長度為5的01串。

樣例輸出

00000

00001

00010

00011

解題思路與實現

如果有小夥伴很少接觸到這種題目的話,可能會覺得有點陌生,不知道從何下手,可能一開始我們能想到「最笨」的方法,但是也覺得挺有「娛樂性」的方法。

這種方式是不是也能夠得到最後的結果,沒錯,當然沒問題,但是,我們在思考的時候可以一步一步來,嘗試多種方法,找到最優解。

這種方法看來不太好,一是不夠靈活,二是敲代碼很累,所以,改進一下。

這裡寫圖片描述

這種方式是不是能夠更加靈活的解決這個問題,這個解決的方式就是我們常說的「暴力破解」,全部用for循環來遍歷所有的情況,如果找到符合的情況就輸出,但是我們會發現,這個演算法的時間複雜度是:,這個方法比前一種方法更好了,但是還不是最好的答案。

再來看看這種方法,這種方法的思路:通過jdk的方法獲取到每個數字的二進位,因為要求輸出的是形如的五位數字,所以,我們還需要根據得到的二進位的數字的長度,在這個字元串的前面加上個,比如,得到的二進位是(長度為1),所以在的前面要加上等於4個。

是不是特別的簡潔,而且這種方法的效率應該也是不錯的:,因為這個是jdk提供的方法,在底層是用位移的方法來實現的(註:我們不推薦用jdk的方法來解決,我們盡量用自己思考的方法來解決,就算這個方法「笨」,但是也是自己思考了)。

當然,如果我們換個角度,也可以的到另一種解法。

這種解法只是用switch-case的方式來解決而已,思路和上面一樣。

最後再來一種不用jdk的方法來解決:

這種方法的思路先不提供,留給小夥伴們自己思考,如果小夥伴有自己的想法,歡迎小夥伴們在留言區給出你的想法或者解法。

另外,思海同學還創建了一個「演算法每日學交流社區」,如果有想加入的小夥伴,可以掃一下下面的二維碼加我為好友,我拉你入群(註:以上的有幾種演算法來自「演算法每日學交流社區」的小夥伴們)。

GIF


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 好好學java 的精彩文章:

TAG:好好學java |