摘要:計劃的主要內容數據結構和算法的基礎知識鞏固。逐步進階的算法訓練。計劃的時間安排每周三和周六說在前面算法每日學計劃打卡問題描述對于長度為位的一個串,每一位都可能是或,一共有種可能。
自己一直在思考,怎么把算法的訓練做好,因為個人在算法這方面的掌握確實還不夠。因此,我現在想做一個“365算法每日學計劃”。“計劃”的主要目的:
1、想通過這樣的方式監督自己更努力的學習算法。
2、想和小伙伴們“組團”一起來學習交流學習算法過程中的點點滴滴。
“計劃”的主要內容:
1、數據結構和算法的基礎知識鞏固。
2、逐步進階的oj算法訓練。
“計劃”的時間安排:每周三和周六
——說在前面
“算法每日學”計劃01打卡:
問題描述
對于長度為5位的一個01串,每一位都可能是0或1,一共有32種可能。它們的前幾個是:00000
00001
00010
00011
00100
請按從小到大的順序輸出這32種01串。
輸入格式
本試題沒有輸入。
輸出格式
輸出32行,按從小到大的順序每行一個長度為5的01串。
樣例輸出
00000
00001
00010
00011
<以下部分省略>
解題思路與實現
如果有小伙伴很少接觸到這種題目的話,可能會覺得有點陌生,不知道從何下手,可能一開始我們能想到“最笨”的方法,但是也覺得挺有“娛樂性”的方法。
System.out.println("00000") .......... System.out.println("11111")
這種方式是不是也能夠得到最后的結果,沒錯,當然沒問題,但是,我們在思考的時候可以一步一步來,嘗試多種方法,找到最優解。
這種方法看來不太好,一是不夠靈活,二是敲代碼很累,所以,改進一下。
這種方式是不是能夠更加靈活的解決這個問題,這個解決的方式就是我們常說的“暴力破解”,全部用for循環來遍歷所有的情況,如果找到符合的情況就輸出,但是我們會發現,這個算法的時間復雜度是:O(n^5),這個方法比前一種方法更好了,但是還不是最好的答案。
public static void main(String[] args) { for (int i = 0; i < 32; i++) { String result = Integer.toBinaryString(i); int num = result.length(); for (int j = 0; j < 5 - num; j++) { result = "0" + result; } System.out.println(result); } }
再來看看這種方法,這種方法的思路:通過jdk的方法Integer.toBinaryString()獲取到每個數字的二進制,因為要求輸出的是形如“11111”的五位數字,所以,我們還需要根據得到的二進制的數字的長度,在這個字符串的前面加上5 - num個“0”,比如,得到的二進制是1(長度為1),所以在1的前面要加上5-(num=1)等于4個0。
是不是特別的簡潔,而且這種方法的效率應該也是不錯的:O(n),因為這個是jdk提供的方法,在底層是用位移的方法來實現的(注:我們不推薦用jdk的方法來解決,我們盡量用自己思考的方法來解決,就算這個方法“笨”,但是也是自己思考了)。
當然,如果我們換個角度,也可以的到另一種解法。
public static void main(String args[]){ for(int i=0;i<32;i++){ String str = Integer.toBinaryString(i); switch (str.length()) { case 1: str = "0000"+str; break; case 2: str = "000"+str; break; case 3: str = "00"+str; break; case 4: str = "0"+str; break; } System.out.println(str); } } }
這種解法只是用switch-case的方式來解決而已,思路和上面一樣。
最后再來一種不用jdk的方法來解決:
這種方法的思路先不提供,留給小伙伴們自己思考,如果小伙伴有自己的想法,歡迎小伙伴們在留言區給出你的想法或者解法。
另外,還創建了一個“算法每日學交流社區”,如果有想加入的小伙伴,可以掃一下下面的二維碼加我為好友,我拉你入群(注:以上的有幾種算法來自“算法每日學交流社區”的小伙伴們)。
文章有不當之處,歡迎指正,你也可以關注我的微信公眾號:好好學java,獲取優質學習資源。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/69632.html
摘要:貪心算法一基本概念所謂貪心算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。實際上,貪心算法適用的情況很少。值得注意的是,貪心算法并不是完全不可以使用,貪心策略一旦經過證明成立后,它就是一種高效的算法。 自從開始做公眾號開始,就一直在思考,怎么把算法的訓練做好,因為思海同學在算法這方面的掌握確實還不夠。因此,我現在想做一個365算法每日學計劃。 計劃的主要目的: 1、想通過這...
摘要:僅值班時間及前后半個小時內打卡有效。上班下班均須打卡,缺打卡則視為未值班。分析表格我的指紋考勤機可以一次導出最多一個月的打卡記錄。有一個問題是,這一個月可能橫跨兩個月,也可能橫跨一年。分析當月當年的考勤記錄同理,不過可能稍微復雜一些。 前面的話 今天公司突然有個緊急任務是讀取excel表格,然后清洗并展示里面的數據。 分配給我的任務是!!! 寫網頁前端表單=。= 媽蛋,可是我很想...
摘要:三結對編程排位賽四個人為一組,由隊長帶隊刷題,每周根據這周四個人的刷題總數進行隊伍間排名。萬人千題結對編程排位賽如果想參加的第二期的同學,可以先聯系作者加群,看看第一期的同袍是如何奮斗的。 ...
閱讀 3257·2021-10-27 14:20
閱讀 2531·2021-10-08 10:05
閱讀 1634·2021-09-09 09:33
閱讀 2906·2019-08-30 13:16
閱讀 1442·2019-08-29 18:34
閱讀 1176·2019-08-29 10:58
閱讀 1231·2019-08-28 18:22
閱讀 1229·2019-08-26 13:33