論left pad的實現

2022-02-26 05:31:27 字數 1112 閱讀 7008

這兩天微博上看到左耳朵耗子吐槽了一下node社群的left-pad的**,原po鏈結

我也思考了一下 怎麼用實現乙個left-pad比較合適,上圖**確實比較搓

leftpad功能,就是字串前面拼指定字元到固定長度,比如

leftpad('hello',20,'1'),就要返回'111111111111111hello'

function leftpad(str, len, ch)
function leftpad(str, len, ch) ,ch)+str;

}

如果把array.prototype.join快取到外部變數裡,多次使用速度更快

var _join = array.prototype.join

function leftpad(str, len, ch) ,ch)+str;

}

上面複雜度都是o(n)的,既然核心思路是把字串重複n次,可以用二分法,比如把s,重複20次,拼在str前面,大概過程如下

total = ''

ch = 's'

20是偶數

ch變成ss

長度變成10

10是偶數

ch變成ssss

長度變成5

5是奇數

total += ch(total變成ssss)

ch變成ssssssss(8個)

長度變成2

2是偶數

ch繼續變成(ssssssssssssssss)(16個s)

長度變成1

total= total+ch(4個加16個)

結束** 拼接str 返回

**如下

function leftpad(str, len, ch) 

}

最後寫完這些,看了耗子大神微博貼的**,突然想起求餘和除以二取整,可以用 按位與len&1 和右移len>>1代替,囧,還是**寫的太少,沒想到

function leftpad(str, len, ch) 

}

論 模板的簡單高效實現

大家都知道php是世界上最好的語言,php在專案開發中的靈活性是個非常重要的優點,非常適合經常變動的業務邏輯和頁面內容,當然都離不開乙個好用的模板引擎,市面上最常見的php模板引擎是smarty,但是smarty功能十分豐富,有些重量級了.那有沒有更好的模板引擎呢?先來 一下模板引擎的幾大特點 書寫...

論C 如何實現多繼承

近日看到了乙個貼子,就是在c 語言中,如何實現多繼承的問題。相信涉獵c 不多的人 像我這樣的菜鳥 一看就覺得很可笑,c 肯定是不能實現多繼承的啊。都知道在c 中因為實現多繼承會有很多的歧義問題,所以在c 中就把多繼承給取消了,而用介面來實現!但是想想,如果是初學者肯定不會不會問這樣的問題。肯定是個高...

論軟體介面中幾種底層通訊的實現

論軟體介面中幾種底層通訊的實現 整理 ackarlix 一 概述 軟體介面是實現乙個系統跟另外系統進行資訊互動的橋梁,在不同的系統之間,根據系統的關聯程度的不同存在緊耦合和松耦合兩種 緊耦合要求介面響應反應快,訊息不能阻塞 松耦合對響應反應要求比較低。本人主要討論緊耦合介面通訊實現,在目前應用中,s...