原创 寫給程序員看的小說

工作了四年,筆者是個對IT技術和文學有着一份熱忱的人,期間在各大編程網站做了600多道題目,這段歲月,現在回味起來,充實而又獲益匪淺。 一次偶然的想法,讓我決定,根據以前做過的題目,改編後,寫成一部幽默,風趣,適合程序員閱讀的小說。 從1

原创 JS字符串的match方法一個讓人惱火的特性

假如有這樣一個需求:給定一個字符串,找出裏面字母A的出現次數。我首先想到的方法是正則。藉助字符串的match方法,可以很快地全局匹配,而無須使用循環。console.log(str.match(/A/g).length);然而,這樣做有一

原创 初識LinkedHashMap

之前從沒用到過LinkedHashMap類。遇到類似的需求,一般是用List裝HashMap,這樣真的很麻煩誒!效率低不說,要寫很多額外的代碼...LinkedHashMap類有什麼好處呢?它在Entry之間維護了一個鏈表。如果你用迭代語

原创 求斐波那契數列第N項的最後一位

RT,該怎麼求呢? 首先,你可能會想到,順序遍歷求解。 利用通項公式,可以得到斐波那契序列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34... 那每一項的最後一位就是: 0, 1, 1, 2, 3, 5, 8, 3,

原创 非正則實現JS字符串的replaceAll方法

在JavaScript中,有一個字符串方法,很讓人不爽。那就是replace方法。假如你傳入的第一個參數是字符串。它只會替換第一個匹配到的子串,而無法全局替換。事實上,你也可以傳入正則表達式,帶“g”參數,彌補這個缺陷。但總歸還是不夠爽。

原创 Guava學習之Preconditions

下面的代碼,比較了使用Preconditions工具類和不使用的情況,實現同樣的功能。可以看出,前者在異常驗證這塊,精簡了很多代碼。//import com.google.common.base.Preconditions; publi

原创 JavaScript求多個數的最小公倍數

方法一: //公式法 var lcm = function() { //求最大公約數 //輾轉相除法 function gcd(a, b) { if (a == 0) return b; return gcd(b %

原创 ECMAScript5中數組方法的性能問題

經常在Codewars打怪升級,練習JS的時候很喜歡使用ES5中的一系列數組方法。 比如filter,map,reduce這樣的函數式方法。 可以達到精簡代碼的目的。 然而,在一次提交代碼的過程中,我突然萌生一種想法。 看不使用ES5的方

原创 實現Java字符串的endsWith方法

在Java中,String的endsWith方法會判斷該字符串是否以指定的後綴結尾。我按照自己的思路實現了這個方法:public class StringUtil { public static boolean endsWith(S

原创 JavaScript數組的isArray方法實現

ES6中添加了Array.isArray方法用來判斷一個參數是不是數組。 這個方法如果要我自己來實現,就會是這樣: function isArray(arr) { var toString = Object.prototype.t

原创 迷你型彙編指令解釋器的Java實現

今天花了1個小時,寫了個迷你型的彙編指令解釋器,只提供了4種指令: 1. mov指令,複製內容到另一個寄存器 2. inc指令,寄存器內容增長1 3. dec指令,寄存器內容減少1 4. jnz指令,如果非0就跳轉   程序假定,寄存器的

原创 Java實現無向圖鄰接表

這個實現只考慮實現無向圖鄰接表的功能,底層使用HashMap。 提供瞭如下的API: 1. addEdge,添加一條邊 2. removeEdge,刪除某條邊 3. containsEdge,是否包含某條邊 4. show,打印展示整個圖

原创 196算法的JavaScript實現

很多數字可以被轉換成“迴文數”,通過應用“196算法”。 “196算法”過程如下: 1. 接收一個正整數,對它的每個數位做翻轉,和原數字相加。 2. 重複這個過程,直到得到迴文數 以48這個正整數爲例: 48  + 84 = 132 13

原创 二進制加法的JavaScript實現

二進制字符串的加法,和十進制的大整數加法很相似。 只不過一個是逢2進1,另一個是逢10進1。 所以,實現起來也比較簡單。 不過,一般要考慮,如果字符串以0開頭的情況,截取掉。 我的實現,沒有考慮這點。 /** * @param {str

原创 JavaScript求階乘的長度

計算大數階乘的長度(數位),可以使用Stirling公式。不過有兩個特殊情況需要注意:1. 求0的階乘長度,應該是12. 求1的階乘長度,也是1這兩點應該作判斷。function count(n) { if(n < 2)