摘要:如果是將重復次,一下子就可以想到這種快速算法用代碼實現(xiàn)同樣的算法可用于次次次次但是如果是要求重復次呢這就需要調(diào)整一下上述的算法。
如果是將 "*" 重復 8 次,一下子就可以想到這種快速算法:
"*" + "*" => "**"
"**" + "**" => "****"
"****" + "****" => Bingo!
用 JavaScript 代碼實現(xiàn):
var n = 8; var str = "*"; while ((n >>>= 1) > 0) { str += str; } console.log(str);
同樣的算法可用于 16 次、32 次、64 次、1024 次...
但是如果是要求重復 9 次呢?這就需要調(diào)整一下上述的算法。
先抽象出一個函數(shù) repeat: (str: string, n: number) => string:
repeat("*", 3) => "***"
repeat("ab", 1) => "ab"
repeat("abcd", 0) => ""
...
然后開始分析:
當 n 為偶數(shù)時:
repeat(str, n) <= repeat(str, n >>> 1) + repeat(str, n >>> 1)
比如:repeat("abc", 12) <= repeat("abc", 6) + repeat("abc", 6)
當 n 為奇數(shù)時,即 n - 1 為偶數(shù):
repeat(str, n) <= str + repeat(str, n - 1)
比如:repeat("*", 21) <= "*" + repeat("*", 20)
當 n 為 1 時:repeat(str, 1) <= str
當 n 為 0 時:repeat(str, 0) <= ""
用 JavaScript 代碼實現(xiàn):
function repeat(str/*:string*/, n/*:number*/) { if (n === 0) return ""; if (n === 1) return str; // `n` 為奇數(shù) if (n % 2) return str + repeat(str, n - 1); // `n` 為偶數(shù), // 但是要把 `repeat(str, n >>> 1)` 緩存起來, // 以避免重復兩次計算 return (str = repeat(str, n >>> 1)) + str; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91988.html
摘要:如果我們把非布爾值作為條件呢打開控制臺并運行上述代碼,會打印說明條件為真值。在中,真值指的是在布爾值上下文中轉(zhuǎn)換后的值為真的值。兩個能夠建立元素間一一對應(yīng)的集合稱為互相對等集合。 showImg(https://segmentfault.com/img/bVbtSvt?w=720&h=360); 為了保證可讀性,本文采用音譯而非直譯。 Javascript 一直是神奇的語言。 不相信我...
摘要:前言繼續(xù)向下看廖大教程,看到了函數(shù)式編程這一節(jié),當時是覺得沒啥用直接跳過了,這次準備要仔細看一遍了,并記錄下一些心得。 前言 繼續(xù)向下看廖大教程,看到了函數(shù)式編程這一節(jié),當時是覺得沒啥用直接跳過了,這次準備要仔細看一遍了,并記錄下一些心得。 函數(shù)式編程 上學期有上一門叫 人工智能 的課,老師強行要我們學了一個叫做 prolog 的語言,哇那感覺確實難受,思維方式完全和之前學過的不一樣,...
摘要:在和中都保留了數(shù)組的強引用,所以在中簡單的清除變量內(nèi)存并沒有得到釋放,因為還存在引用計數(shù)。而在中,它的鍵是弱引用,不計入引用計數(shù)中,所以當被清除之后,數(shù)組會因為引用計數(shù)為而被回收掉。其實我們主要注意的引用是不計引用計數(shù)的,就好理解了。 showImg(https://segmentfault.com/img/remote/1460000019147368?w=900&h=383); 前...
摘要:舉例來說即便某個失敗了,也不會導致的發(fā)生,這樣在不在乎是否有項目失敗,只要拿到都結(jié)束的信號的場景很有用。對于則稍有不同只要有子項,就會完成,哪怕第一個了,而第二個了,也會,而對于,這種場景會直接。 1. 引言 本周精讀的內(nèi)容是:Google I/O 19。 2019 年 Google I/O 介紹了一些激動人心的 JS 新特性,這些特性有些已經(jīng)被主流瀏覽器實現(xiàn),并支持 polyfill...
摘要:在調(diào)用微信分享的時候如是這樣帶有的分享后,打開分享后的是關(guān)于這部分是微信加的。解決方法將分開將前后分開,微信就不會將拼接到之后得到的結(jié)果是,第一次打開還是會進入到,第二次打開才會進入到使用重定向在文件夾下,新建。內(nèi)容然后這樣就跳轉(zhuǎn)完成 在調(diào)用微信分享api的時候: let shareUrl = https://xxxx#/abc wx.onMenuShareTimeline({ ...
閱讀 1189·2021-11-24 09:39
閱讀 2695·2021-09-28 09:35
閱讀 1085·2019-08-30 15:55
閱讀 1381·2019-08-30 15:44
閱讀 888·2019-08-29 17:00
閱讀 1985·2019-08-29 12:19
閱讀 3324·2019-08-28 18:28
閱讀 702·2019-08-28 18:10